
<template>
  <el-drawer :size="value && isConditionNode() ?'750px':'600px'" class="drawer JNPF-common-drawer" :visible.sync="visible" @close="cancel" v-if="properties" append-to-body :wrapperClosable="false">
    <!-- 标题 -->
    <header slot="title" class="header" v-if="value && (value.type=='condition'|| value.type=='approver' || value.type=='subFlow' || value.type=='start' )">
      <el-input size="mini" v-model="properties.title" style="z-index:9;max-width: 200px;" placeholder="请输入">
      </el-input>
    </header>
    <header slot="title" class="header" v-else>{{properties.title}}</header>

    <!-- 新增数据节点配置 -->
    <AddDataNode ref="addNodeRef" :formConf="addDataForm" :integrateType="integrateType" :usedFormItems="usedFormItems" :formFieldsOptions="formExOptions" :flowOptions='flowOptions' :getFormFieldList="getFormFieldList1" v-if="value && isAddDataNode()" :key="key" />

    <!-- 条件  -->
    <section class="condition-pane pd-10" v-if="value && isConditionNode()">
      <div>
        <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
          条件分支中只要有一个勾选了此选项,即可强化条件 那么本条件组满足条件组的都会进入条件</el-col>
        <el-switch v-model="properties.plusFlag" />
      </div>
      <el-radio v-model="properties.modeFlag" :label="1">用户模式</el-radio>
      <el-radio v-model="properties.modeFlag" :label="2">开发者模式</el-radio>

      <div v-if="properties.modeFlag === 1 ">
        <ConditionalLogic v-model="pconditions" :usedFormItems="usedFormItems" :formFieldsOptions="formFieldsOptions" :prevNodeList="prevNodeList" :paramsConfig="paramsConfig" />
        <div>
          <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
            自定义关系</el-col>
          <el-switch v-model="properties.isCustomLogical" />
        </div>
        <CustomConditionalLogic v-if="properties.isCustomLogical" :pconditions="pconditions" v-model="properties.customLogical" />
        <el-form class="mt-10" label-position="top">
          <el-form-item label="转向节点" v-if="properties.conditionType === 1">
            <div slot="label" class="form-item-label">转向节点</div>
            <el-select v-model="properties.swerveNode" clearable class="form-item-content" @change="onSwerveNodeChange($event)">
              <el-option v-for="item in beforeNodeOptions" :key="item.id" :label="item.fullName" :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
      </div>

      <div v-if="properties.modeFlag === 2 ">

        <el-form label-position="top" class="pd-10">
          <div class="form-item-content form-item-content-first">
            <div class="form-sub-title">接口设置</div>
            <el-form-item label-width="0">
              <interface-dialog :value="properties.conditionFuncConfig.interfaceId" :title="properties.conditionFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('properties','conditionFuncConfig',arguments)" />
            </el-form-item>
            <div class="form-sub-title">参数设置</div>
            <el-table :data="properties.conditionFuncConfig.templateJson">
              <el-table-column type="index" width="50" label="序号" align="center" />
              <el-table-column prop="field" label="参数名称" width="150">
                <template slot-scope="scope">
                  <span class="required-sign">{{scope.row.required?'*':''}}</span>
                  {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                </template>
              </el-table-column>
              <el-table-column prop="field" label="参数来源" width="120">
                <template slot-scope="scope">
                  <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'properties','conditionFuncConfig')">
                    <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                    </el-option>
                  </el-select>
                </template>
              </el-table-column>
              <el-table-column prop="value" label="参数值">
                <template slot-scope="scope">
                  <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                    <el-option-group v-if="scope.row.required">
                      <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                    </el-option-group>
                    <el-option-group v-else>
                      <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                    </el-option-group>
                  </el-select>
                  <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                    <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-select>
                  <template v-else-if="scope.row.sourceType == 2">
                    <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                    <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                    <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                  </template>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </el-form>
      </div>

    </section>
    <!-- 定时器  -->
    <section class="condition-pane pd-10-20" v-if="value && isTimerNode()">

      <el-switch v-model="properties.timeModeFlag" active-text="延迟一段时间" inactive-text="延迟到指定时间" /><br />

      <el-row v-if="properties.timeModeFlag === false">

        <span class="ml-8">日期</span><br />
        <el-switch v-model="properties.pointDateFlag" active-text="使用表单字段" inactive-text="自己选择日期" /><br />
        <el-date-picker v-model="properties.pointDate" align="right" type="date" placeholder="选择日期" v-if="properties.pointDateFlag === false" value-format="timestamp" format="yyyy-MM-dd" />
        <el-form class="mt-10" label-position="top">
          <el-form-item v-if="properties.pointDateFlag === true">
            <el-select placeholder="请选择字段" class="form-field" filterable v-model="properties.pointDateField">
              <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
              </el-option>
            </el-select>
          </el-form-item>
          <span class="ml-8">时间</span><br />

          <el-select v-model="properties.pointDateMode" placeholder="请选择">
            <el-option label="在以上日期" :value="1"></el-option>
            <el-option label="之前" :value="2"></el-option>
            <el-option label="之后" :value="3"></el-option>
          </el-select>

          <div v-if="properties.pointDateMode ===2 || properties.pointDateMode === 3">
            <el-input-number v-model="properties.pointDays" :min="1" :step="1" />
            <span class="ml-8">天</span><br />
          </div>

          <el-time-picker v-model="properties.pointTimePicker" placeholder="任意时间点" value-format="timestamp" format="HH:mm:ss" />
          <span class="ml-8">执行</span>
        </el-form>

      </el-row>

      <el-row v-if="properties.timeModeFlag === true">
        <el-alert title="定时器将根据设置的延迟时间流转审批" type="warning" :closable="false" show-icon />
        <el-col :span="24">
          <el-form class="mt-10" label-position="top">
            <el-form-item label="时间设置">
              <div slot="label" class="form-item-label">延迟一段时间</div>
              <div class="form-item-content">
                <div class="mb-10">
                  <el-switch v-model="properties.dayFieldFlag" active-text="使用表单字段" inactive-text="固定天数" /><br />
                  <el-input-number :min="0" v-model="properties.day" :precision="0" controls-position="right" v-if="properties.dayFieldFlag ===false" />
                  <el-form-item v-if="properties.dayFieldFlag === true">
                    <el-select placeholder="请选择字段" class="form-field" filterable v-model="properties.dayField">
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </el-form-item>
                  <span class="ml-8">天</span>
                </div>

                <div class="mb-10">
                  <el-switch v-model="properties.hourFieldFlag" active-text="使用表单字段" inactive-text="固定小时" /><br />
                  <el-input-number :min="0" v-model="properties.hour" :precision="0" controls-position="right" v-if="properties.hourFieldFlag ===false" />
                  <el-form-item v-if="properties.hourFieldFlag === true">
                    <el-select placeholder="请选择字段" class="form-field" filterable v-model="properties.hourField">
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </el-form-item>
                  <span class="ml-8">小时</span>
                </div>
                <div class="mb-10">
                  <el-switch v-model="properties.minuteFieldFlag" active-text="使用表单字段" inactive-text="固定分钟" /><br />
                  <el-input-number :min="0" v-model="properties.minute" :precision="0" controls-position="right" v-if="properties.minuteFieldFlag ===false" />
                  <el-form-item v-if="properties.minuteFieldFlag === true">
                    <el-select placeholder="请选择字段" class="form-field" filterable v-model="properties.minuteField">
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </el-form-item>
                  <span class="ml-8">分钟</span>
                </div>
                <div>
                  <el-switch v-model="properties.secondFieldFlag" active-text="使用表单字段" inactive-text="固定秒钟" /><br />
                  <el-input-number :min="0" v-model="properties.second" :precision="0" controls-position="right" v-if="properties.secondFieldFlag ===false" />
                  <el-form-item v-if="properties.secondFieldFlag === true">
                    <el-select placeholder="请选择字段" class="form-field" filterable v-model="properties.secondField">
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </el-form-item>
                  <span class="ml-8">秒</span>
                </div>
              </div>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
    </section>

    <!-- 抄送节点 -->
    <section class="condition-pane pd-10" v-if="value && isMessageNode()">
      <el-alert title="发送消息通知合5为一" type="warning" show-icon />
      <el-alert title="推送消息通知的时候,同时会产生抄送,便于通知的人查看到流程的处理信息" type="warning" show-icon />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="接收人">
          <div slot="label" class="form-item-label">接收人</div>
          <JnpfUsersSelect v-model="properties.msgUserIds" multiple placeholder="请选择接收人" />
        </el-form-item>

        <el-form-item class="mt-10">
          <div slot="label" class="form-item-label">消息推送方式
            <el-tooltip content="消息推送方式" placement="top">
              <a class="el-icon-question tooltip-question"></a>
            </el-tooltip>
          </div>
          <el-select class="form-item-content" v-model="properties.messageMsgConfig.on" placeholder="请选择" filterable>
            <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
          </el-select>
        </el-form-item>
        <div class="form-item-content" v-if="properties.messageMsgConfig.on===1">
          <el-form-item label=" 发送配置">
            <msg-dialog :value="properties.messageMsgConfig.msgId" :title="properties.messageMsgConfig.msgName" @change="onMsgChange('properties','messageMsgConfig',arguments)" />
          </el-form-item>
          <el-form-item label="参数设置" style="margin-bottom: 0;"></el-form-item>
          <el-table :data="properties.messageMsgConfig.templateJson">
            <el-table-column type="index" width="50" label="序号" align="center" />
            <el-table-column prop="field" label="模板名称" width="150">
              <template slot-scope="scope">
                <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                </el-link>
              </template>
            </el-table-column>
            <el-table-column prop="field" label="参数名称" width="150">
              <template slot-scope="scope">
                <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                  {{item.field}}({{item.fieldName}})
                </div>
              </template>
            </el-table-column>
            <el-table-column prop="value" label="表单字段">
              <template slot-scope="scope">
                <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                  <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
          </el-table>
        </div>

      </el-form>
    </section>

    <!-- 抄送节点 -->
    <section class="condition-pane pd-10" v-if="value && isCopyNode()">
      <el-alert title="抄送同时根据发起节点配置的抄送通知进行发送推送消息" type="warning" closable={false} show-icon />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="抄送设置">
          <div slot="label" class="form-item-label">抄送设置</div>
          <el-form-item style="margin-bottom:0!important">
            <org-select ref="approver-user-org" type="users" title="添加审批人" v-model="properties.circulateUser" inlet='flow' />
          </el-form-item>
          <el-form-item style="margin-bottom:0!important">
            <div slot="label">抄送人范围
              <el-tooltip content="抄送人员选择范围附加条件" placement="top">
                <a class="el-icon-question tooltip-question"></a>
              </el-tooltip>
            </div>
            <el-select v-model="properties.extraRule" filterable>
              <el-option v-for="(item,i) in extraRuleOptions" :key="i" :label="item.label" :value="item.value" />
            </el-select>
          </el-form-item>
        </el-form-item>
      </el-form>
    </section>

    <!-- 邮件节点  -->
    <section class="condition-pane pd-10" v-if="value && isMailNode()">
      <el-row>
        <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
          设置该邮件节点的相关信息,请注意! 如果选择的用户没有设置邮件地址,邮件将不会被发送给他!</el-col>
        <el-col :span="24">
          <el-form label-position="top">
            <el-form-item label="收件人">
              <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.to" title="添加用户" @change="onOrgChange" class="mb-10" />

              发件人(选择发件人,如果不选择默认则是管理员发送邮件)
              <div class="mb-10">
                <el-input placeholder="请输入发件人邮件地址" v-model="properties.from" clearable :disabled=true>
                </el-input>
              </div>
              <div class="mb-10">
                邮件主题
                <el-input placeholder="邮件的主题" v-model="properties.subject" clearable>
                </el-input>
              </div>
              抄送人
              <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.cc" title="添加用户" @change="onOrgChange" class="mb-10" />
              <div>
                密送人
                <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.bcc" title="添加用户" @change="onOrgChange" class="mb-10" />
              </div>
              <div>
                邮件内容
                <el-tooltip class="item" effect="dark" content="可以专门做一个编写邮件的页面,然后在这里让用户选择哪个邮件模板,体验感更好" placement="top">
                  <i class="el-tooltip el-icon-warning-outline"></i>
                </el-tooltip>
              </div>
            </el-form-item>

            <el-form-item label="附件" prop="attachment">
              <JNPF-UploadFz v-model="properties.fileList" type="mail" />
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
    </section>

    <!-- 业务编排节点 -->
    <section class="condition-pane pd-10" v-if="value && isServiceTaskNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        此节点供给于开发人员使用,用于编写Java代码,在该Java代码中 可以获取到表单以及流程的任何详细信息</el-col>
      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="请填写Spring Bean名称">
          <span slot="label">
            请填写Java全类名或Spring Bean名称
            <el-tooltip class="item" effect="dark" content="请提供本系统中有效的类,并且此类需要继承JavaDelegate或者ActivityBehavior的Java类" placement="top">
              <i class="el-tooltip el-icon-warning-outline"></i>
            </el-tooltip>
          </span>
          <div class="mb-10">
            <el-input placeholder="请提供本系统中有效的类,并且此类需要继承JavaDelegate或者ActivityBehavior的Java类" v-model="properties.serviceClassName" clearable>
            </el-input>
            <br />自定义参数<br />
            <el-input v-model="properties.serviceClassParam" type="textarea" :rows="30" size=500 resize="both"></el-input>
          </div>
        </el-form-item>
      </el-form>
    </section>

    <section class="condition-pane pd-10" v-if="value && isJumpTaskNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        当此节点符合条件的时候,即将会跳转到所选定的目标节点,如果不符合条件,则会默认向下流转</el-col>
      <br />

      <el-radio v-model="properties.modeFlag" :label="1">用户模式</el-radio>
      <el-radio v-model="properties.modeFlag" :label="2">开发者模式</el-radio>

      <div v-if="properties.modeFlag === 1 ">
        <ConditionalLogic v-model="pconditions" :usedFormItems="usedFormItems" :formFieldsOptions="formFieldsOptions" :prevNodeList="prevNodeList" :paramsConfig="paramsConfig" />
        <div>
          <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
            自定义关系</el-col>
          <el-switch v-model="properties.isCustomLogical" />
        </div>
        <CustomConditionalLogic v-if="properties.isCustomLogical" :pconditions="pconditions" v-model="properties.customLogical" />
        <el-form class="mt-10" label-position="top">
          <el-form-item label="转向节点" v-if="properties.conditionType === 1">
            <div slot="label" class="form-item-label">转向节点</div>
            <el-select v-model="properties.swerveNode" clearable class="form-item-content" @change="onSwerveNodeChange($event)">
              <el-option v-for="item in beforeNodeOptions" :key="item.id" :label="item.fullName" :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
      </div>

      <div v-if="properties.modeFlag === 2 ">
        <el-form label-position="top" class="pd-10">
          <div class="form-item-content form-item-content-first">
            <div class="form-sub-title">接口设置</div>
            <el-form-item label-width="0">
              <interface-dialog :value="properties.conditionFuncConfig.interfaceId" :title="properties.conditionFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('properties','conditionFuncConfig',arguments)" />
            </el-form-item>
            <div class="form-sub-title">参数设置</div>
            <el-table :data="properties.conditionFuncConfig.templateJson">
              <el-table-column type="index" width="50" label="序号" align="center" />
              <el-table-column prop="field" label="参数名称" width="150">
                <template slot-scope="scope">
                  <span class="required-sign">{{scope.row.required?'*':''}}</span>
                  {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                </template>
              </el-table-column>
              <el-table-column prop="field" label="参数来源" width="120">
                <template slot-scope="scope">
                  <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'properties','conditionFuncConfig')">
                    <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                    </el-option>
                  </el-select>
                </template>
              </el-table-column>
              <el-table-column prop="value" label="参数值">
                <template slot-scope="scope">
                  <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                    <el-option-group v-if="scope.row.required">
                      <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                    </el-option-group>
                    <el-option-group v-else>
                      <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                    </el-option-group>
                  </el-select>
                  <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                    <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-select>
                  <template v-else-if="scope.row.sourceType == 2">
                    <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                    <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                    <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                  </template>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </el-form>
      </div>

      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        请选择当条件为true的时候,需要跳转的节点,支持子表条件判断</el-col>

      <el-select v-model="properties.jumpTaskNode" placeholder="请选择节点">
        <el-option v-for="item in beforeNodeOptions" :key="item.id" :label="item.fullName" :value="item.id">
        </el-option>
      </el-select>

    </section>

    <section class="condition-pane pd-10" v-if="value && isJumpExTaskNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        当此节点符合条件的时候,即将会跳转到所选定的目标节点,如果不符合条件,则会默认向下流转</el-col>
      <br />
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        请选择当条件为true的时候,需要跳转的节点,支持子表条件判断</el-col>

      <el-select v-model="properties.jumpTaskNode" placeholder="请选择节点">
        <el-option v-for="item in beforeNodeOptions" :key="item.id" :label="item.fullName" :value="item.id">
        </el-option>
      </el-select>

    </section>

    <!-- DingDing节点 -->
    <section class="condition-pane pd-10" v-if="value && isDingNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        如果此用户没有配置钉钉号码,那么将不会通知到他</el-col>
      <h1>为了系统安全性起见,线上环境->前台暂不允许定义此种节点! 考虑到有人恶意发送</h1>
      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="添加通知用户">
          <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.to" title="添加用户" @change="onOrgChange" class="mb-10" />
          <el-form-item label="是否将审批抄送给这些人">
            <el-switch v-model="properties.processFlag" />
          </el-form-item>
          通知内容:
          <el-input v-model="properties.notifyContent" type="textarea" :rows="30" size=500 resize="both"></el-input>
        </el-form-item>
      </el-form>
    </section>

    <!-- Wx节点 -->
    <section class="condition-pane pd-10" v-if="value && isWxNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        如果此用户没有配置微信号码,那么将不会通知到他</el-col>
      <h1>为了系统安全性起见,线上环境->前台暂不允许定义此种节点! 考虑到有人恶意发送</h1>
      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="添加通知用户">
          <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.to" title="添加用户" @change="onOrgChange" class="mb-10" />
          <el-form-item label="是否将审批抄送给这些人">
            <el-switch v-model="properties.processFlag" />
          </el-form-item>
          通知内容:
          <el-input v-model="properties.notifyContent" type="textarea" :rows="30" size=500 resize="both"></el-input>
        </el-form-item>
      </el-form>
    </section>

    <!-- Dx节点 -->
    <section class="condition-pane pd-10" v-if="value && isDxNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        如果此用户没有配置手机号码,那么将不会通知到他</el-col>
      <h1>为了系统安全性起见,线上环境->前台暂不允许定义此种节点! 考虑到有人恶意发送</h1>
      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="添加通知用户">
          <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.to" title="添加用户" @change="onOrgChange" class="mb-10" />
          <el-form-item label="是否将审批抄送给这些人">
            <el-switch v-model="properties.processFlag" />
          </el-form-item>
          通知内容:
          <el-input v-model="properties.notifyContent" type="textarea" :rows="30" size=500 resize="both"></el-input>
        </el-form-item>
      </el-form>
    </section>

    <!-- 站内信节点 -->
    <section class="condition-pane pd-10" v-if="value && isZhanNode()">
      <el-form label-position="top" class="pd-10">
        <el-form-item label="添加通知用户">
          <org-select ref="approver-copy-user-org" buttonType="button" v-model="properties.to" title="添加用户" @change="onOrgChange" class="mb-10" />
          <el-form-item label="是否将审批抄送给这些人">
            <el-switch v-model="properties.processFlag" />
          </el-form-item>
          通知内容:
          <el-input v-model="properties.notifyContent" type="textarea" :rows="30" size=500 resize="both"></el-input>
        </el-form-item>
      </el-form>
    </section>

    <!-- 脚本编排节点 -->
    <section class="condition-pane pd-10" v-if="value && isScriptTaskNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        Activiti/Flowable/Camunda默认支持三种脚本语言Groovy,JavaScript,Juel,还允许使用其他的脚本语言,前提是把依赖的jar包设置classpath中</el-col>

      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="请选择脚本类型">
          <span slot="label">
            请选择脚本类型
            <el-tooltip class="item" effect="dark" content="Activiti/Flowable/Camunda默认支持三种脚本语言Groovy,JavaScript,Juel,还允许使用其他的脚本语言,前提是把依赖的jar包设置classpath中" placement="top">
              <i class="el-tooltip el-icon-warning-outline"></i>
            </el-tooltip>
          </span>
          <el-radio v-model="properties.scriptFormat" :label="1">Groovy</el-radio>
          <el-radio v-model="properties.scriptFormat" :label="2">JavaScript</el-radio>
          <el-radio v-model="properties.scriptFormat" :label="3">JUEL</el-radio>
        </el-form-item>
        <el-form-item label="脚本内容">
          <span slot="label">
            脚本内容
            <el-tooltip class="item" effect="dark" content="不应该是文本域 应该是对应脚本语言的编辑器,这样体验感更好 可以优化" placement="top">
              <i class="el-tooltip el-icon-warning-outline"></i>
            </el-tooltip>
            <el-input v-model="properties.scriptContent" type="textarea" :rows="10" size=500 resize="both"></el-input>
          </span>
        </el-form-item>

      </el-form>
    </section>
    <!-- 运维编排任务节点 -->
    <section class="condition-pane pd-10" v-if="value && isShellTaskNode()">
      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        此节点允许在流程运行过程中执行本系操作系统的脚本,命令</el-col>

      <br />
      <el-form label-position="top" class="pd-10">
        <el-form-item label="请填写cmd命令">
          <span slot="label">
            请填写cmd命令
            <el-tooltip class="item" effect="dark" content="输入Windows Command命令 或者Linux Shell脚本" placement="top">
              <i class="el-tooltip el-icon-warning-outline"></i>
            </el-tooltip>
          </span>
          <div class="mb-10">
            <el-input placeholder="输入Windows Command命令 或者Linux Shell脚本" v-model="properties.command" clearable>
            </el-input>
          </div>
        </el-form-item>

        <el-form-item label="是否需要等待脚本执行完成">
          <span slot="label">
            是否需要等待脚本执行完成
            <el-tooltip class="item" effect="dark" content="是否需要等待脚本执行完成" placement="top">
              <i class="el-tooltip el-icon-warning-outline"></i>
            </el-tooltip>
          </span>
          <el-radio v-model="properties.waitShellFlag" :label=true>是</el-radio>
          <el-radio v-model="properties.waitShellFlag" :label=false>否</el-radio>
        </el-form-item>

      </el-form>
    </section>

    <!-- 请求编排节点 -->
    <section class="condition-pane pd-10" v-if="value && isHttpTaskNode()">

      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        此节点可以做到类似于webhook的功能->可以直接调用三方接口 或者系统内的接口 httpInitFuncConfig</el-col>
      <br />
      <el-form label-position="top" class="pd-10">
        <div class="form-item-content form-item-content-first">
          <div class="form-sub-title">接口设置</div>
          <el-form-item label-width="0">
            <interface-dialog :value="properties.httpInitFuncConfig.interfaceId" :title="properties.httpInitFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('properties','httpInitFuncConfig',arguments)" />
          </el-form-item>
          <div class="form-sub-title">参数设置</div>
          <el-table :data="properties.httpInitFuncConfig.templateJson">
            <el-table-column type="index" width="50" label="序号" align="center" />
            <el-table-column prop="field" label="参数名称" width="150">
              <template slot-scope="scope">
                <span class="required-sign">{{scope.row.required?'*':''}}</span>
                {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
              </template>
            </el-table-column>
            <el-table-column prop="field" label="参数来源" width="120">
              <template slot-scope="scope">
                <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'properties','httpInitFuncConfig')">
                  <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="value" label="参数值">
              <template slot-scope="scope">
                <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                  <el-option-group v-if="scope.row.required">
                    <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-option-group>
                  <el-option-group v-else>
                    <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-option-group>
                </el-select>
                <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                  <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                </el-select>
                <template v-else-if="scope.row.sourceType == 2">
                  <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                  <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                  <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                </template>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </el-form>
    </section>

    <!-- 请求编排节点 -->
    <section class="condition-pane pd-10" v-if="value && isSbNode()">

      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        该任务没有具体作用,仅代表线下沟通</el-col>
      <br />
    </section>

    <!-- sql编排节点 -->
    <section class="condition-pane pd-10" v-if="value && isSQLTaskNode()">

      <el-col :span="24" style="font-size: 14px;line-height:32px;color: #a5a5a5;">
        此节点可以跨任意数据源(MySQL,Oracle,SQLServer,PG,DM,KingBasae)的库以及表执行SQL语句,此节点一般供给与开发人员使用
        可以将表单参数传入SQL语句中!</el-col>
      <br />
      <el-form label-position="top" class="pd-10">
        <div class="form-item-content form-item-content-first">
          <div class="form-sub-title">接口设置</div>
          <el-form-item label-width="0">
            <interface-dialog :value="properties.sqlInitFuncConfig.interfaceId" :title="properties.sqlInitFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('properties','sqlInitFuncConfig',arguments)" />
          </el-form-item>
          <div class="form-sub-title">参数设置</div>
          <el-table :data="properties.sqlInitFuncConfig.templateJson">
            <el-table-column type="index" width="50" label="序号" align="center" />
            <el-table-column prop="field" label="参数名称" width="150">
              <template slot-scope="scope">
                <span class="required-sign">{{scope.row.required?'*':''}}</span>
                {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
              </template>
            </el-table-column>
            <el-table-column prop="field" label="参数来源" width="120">
              <template slot-scope="scope">
                <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'properties','sqlInitFuncConfig')">
                  <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                  </el-option>
                </el-select>
              </template>
            </el-table-column>
            <el-table-column prop="value" label="参数值">
              <template slot-scope="scope">
                <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                  <el-option-group v-if="scope.row.required">
                    <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-option-group>
                  <el-option-group v-else>
                    <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                  </el-option-group>
                </el-select>
                <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                  <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                </el-select>
                <template v-else-if="scope.row.sourceType == 2">
                  <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                  <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                  <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                </template>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </el-form>
    </section>

    <!-- 子流程  -->
    <section class="approver-pane" v-if="value && isSubFlowNode()">
      <el-tabs style="height:100%;">
        <el-tab-pane label="基础设置">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" :model="subFlowForm" class="pd-10-20">
              <el-form-item label="发起设置">
                <div slot="label" class="form-item-label">发起设置</div>
                <div class="form-item-content">
                  <el-radio-group v-model="subFlowForm.initiateType" @change="resetOrgColl">
                    <el-radio v-for="item in initiateTypeOptions" :label="item.value" :key="item.value" :disabled="item.disabled" class="radio-item">{{item.label}}
                    </el-radio>
                  </el-radio-group>

                  <div v-if="subFlowForm.initiateType === 3" class="option-box-tip">
                    发起者自己将作为审批人处理审批单</div>
                  <div v-if="subFlowForm.initiateType === 1" class="option-box-tip">
                    <el-alert title="发起者主管将作为审批人处理审批单,一般指汇报线主管，不在上级部门中，但相关业务向该主管汇报!
                      该主管设置在【组织管理】-【用户管理】-【编辑或新增】-【直属主管配置】" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="subFlowForm.initiateType === 13" class="option-box-tip">
                    <el-alert title="部门控件的对应主管将进行审批" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="subFlowForm.initiateType === 2" class="option-box-tip">
                    <el-alert title="发起者的部门主管将作为审批人处理审批单,先找到发起人所在的部门,然后在【组织管理】-【组织管理】-【编辑或新增】-【部门主管配置项】" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="subFlowForm.initiateType === 10" class="option-box-tip">
                    <el-alert title="发起者的连续多级主管将作为审批人处理审批单,一般指汇报线主管，不在上级部门中，但相关业务向该主管汇报!
                        该主管设置在【组织管理】-【用户管理】-【编辑或新增】-【直属主管配置】" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="subFlowForm.initiateType === 11" class="option-box-tip">
                    <el-alert title="发起者的部门主管将作为审批人处理审批单,先找到发起人所在的部门,然后在【组织管理】-【组织管理】-【编辑或新增】-【部门主管配置项】" type="warning" :closable="false" show-icon />
                  </div>
                </div>

                <div v-if="subFlowForm.initiateType === 6" class="option-box-tip">

                  <el-alert title="该选项和五为一!!!  可以同时指定审批人\角色\部门\岗位\分组 ---- 处理审批单" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="subFlowForm.initiateType === 12" class="option-box-tip">

                  <el-alert title="指定多个部门 最终由多个部门的主管 处理审批单" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="subFlowForm.initiateType === 4" class="option-box-tip">

                  <el-alert title="选择流程表单字段的值作为审批人" type="warning" :closable="false" show-icon />
                </div>
                <div v-if="subFlowForm.initiateType === 5" class="option-box-tip">

                  <el-alert title="设置审批人为审批流程中某个环节的审批人" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="subFlowForm.initiateType === 7" class="option-box-tip">

                  <el-alert title="该选项比较特殊,该选项专门为上一节点给下一节点指定审批人专用!可以搭配选择分支食用更佳!" type="warning" :closable="false" show-icon />
                </div>
                <div v-if="subFlowForm.initiateType === 9" class="option-box-tip">

                  <el-alert title="从目标服务接口中中获取审批人" type="warning" :closable="false" show-icon />
                </div>
                <el-form-item label="发起者的" style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 1 || subFlowForm.initiateType === 10">
                  <el-select v-model="subFlowForm.managerLevel" filterable>
                    <el-option v-for="item in 10" :key="item" :label="item===1?'直属主管':'第'+item+'级主管'" :value="item">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 10">
                  <el-switch v-model="approverForm.orderFlag" active-text="自上而下" inactive-text="自下而上" />
                </el-form-item>

                <el-form-item label="发起者的" style="margin-bottom:0!important;" v-if="[2, 11, 15, 16].includes(subFlowForm.initiateType)">
                  <el-select v-model="subFlowForm.departmentLevel" filterable>
                    <el-option v-for="item in 10" :key="item" :label="startUserLabel(subFlowForm.initiateType, item)" :value="item">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item style="margin-bottom:0!important;" v-if="subFlowForm.initiateType === 11">
                  <el-checkbox v-model="subFlowForm.noLeaderFlag" :true-label="1" :false-label="0">找不到主管时，是否跳过该级,继续查询</el-checkbox>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 11">
                  <el-switch v-model="subFlowForm.orderFlag" active-text="自上而下" inactive-text="自下而上" />
                </el-form-item>

                <el-form-item label="表单字段" style="margin-bottom:0" v-if="subFlowForm.initiateType === 4">
                  <div class="assignee-form">
                    <el-select v-model="subFlowForm.formFieldType" placeholder="请选择字段" class="form-field-type">
                      <el-option :value="1" label="用户"></el-option>
                      <el-option :value="2" label="部门"></el-option>
                      <el-option :value="3" label="岗位"></el-option>
                      <el-option :value="4" label="角色"></el-option>
                      <el-option :value="5" label="分组"></el-option>
                    </el-select>
                    <el-select v-model="subFlowForm.formField" placeholder="请选择字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </div>
                </el-form-item>
                <el-form-item label="审批节点" style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 5">
                  <el-select v-model="subFlowForm.nodeId" placeholder="请选择节点" filterable>
                    <el-option v-for="item in nodeOptions" :key="item.nodeId" :label="item.properties.title" :value="item.nodeId">
                    </el-option>
                  </el-select>
                </el-form-item>

                <el-form-item label="表单字段" style="margin-bottom:0" v-if="subFlowForm.initiateType === 13">
                  <div class="assignee-form">
                    <el-select v-model="subFlowForm.formFieldType" placeholder="请选择字段" class="form-field-type">
                      <el-option :value="1" label="用户"></el-option>
                      <el-option :value="2" label="部门"></el-option>
                    </el-select>
                    <el-select v-model="subFlowForm.formField" placeholder="请选择字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </div>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 9">
                  <div slot="label">请求路径
                    <el-tooltip placement="top" content='请求自带参数：taskId、taskNodeId，返回结构：JSON对象{"handleId":"id1,id2"}'>
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <el-form-item label-width="0">
                    <interface-dialog :value="subFlowForm.interfaceConfig.interfaceId" :title="subFlowForm.interfaceConfig.interfaceName" :sourceType="1" @change="onFuncChange('subFlowForm','interfaceConfig',arguments)" />
                  </el-form-item>
                  <div class="form-sub-title">参数设置</div>
                  <el-table :data="subFlowForm.interfaceConfig.templateJson">
                    <el-table-column type="index" width="50" label="序号" align="center" />
                    <el-table-column prop="field" label="参数名称" width="150">
                      <template slot-scope="scope">
                        <span class="required-sign">{{scope.row.required?'*':''}}</span>
                        {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                      </template>
                    </el-table-column>
                    <el-table-column prop="field" label="参数来源" width="120">
                      <template slot-scope="scope">
                        <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'subFlowForm','interfaceConfig')">
                          <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                          </el-option>
                        </el-select>
                      </template>
                    </el-table-column>
                    <el-table-column prop="value" label="表单字段">
                      <template slot-scope="scope">
                        <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                          <el-option-group v-if="scope.row.required">
                            <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                          </el-option-group>
                          <el-option-group v-else>
                            <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                          </el-option-group>
                        </el-select>
                        <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-select>
                        <template v-else-if="scope.row.sourceType == 2">
                          <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                          <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                          <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                        </template>
                      </template>
                    </el-table-column>
                  </el-table>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 6||subFlowForm.initiateType === 7">
                  <org-select ref="approver-user-org" type="users" :title="subFlowForm.initiateType === 6?'添加审批人':'添加候选人'" v-model="subFlowForm.approvers" inlet='flow' @change="onApproversChange" />
                </el-form-item>
                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 12">
                  <JnpfPosSelect v-model="subFlowForm.deptIds" placeholder="请选择" clearable multiple />
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="subFlowForm.initiateType === 6">
                  <div slot="label">审批人范围
                    <el-tooltip content="指定成员增加人员选择范围附加条件" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <el-select v-model="subFlowForm.extraRule" filterable>
                    <el-option v-for="(item,i) in extraRuleOptions" :key="i" :label="item.label" :value="item.value" />
                  </el-select>
                </el-form-item>

                </div>
              </el-form-item>
              <el-form-item label="子流程类型">
                <div slot="label" class="form-item-label">子流程类型</div>
                <el-radio-group class="form-item-content" v-model="subFlowForm.isAsync">
                  <el-radio :label="false">同步</el-radio>
                  <el-radio :label="true">异步</el-radio>
                </el-radio-group>
              </el-form-item>
              <el-form-item label="子流程表单">
                <div slot="label" class="form-item-label">子流程表单</div>
                <flow-dialog class="form-item-content" :value="subFlowForm.flowId" :title="subFlowForm.flowName" :flowType="flowType" @change="onSubFlowIdChange" />
              </el-form-item>
              <el-form-item label="子流程传递">
                <div slot="label" class="form-item-label">子流程传递</div>
                <div class="form-item-content hand" @click="openRuleBox">
                  <el-input class="hand" :value="subFlowForm.assignList.length?'已设置':''" placeholder="请设置子流程传递规则" suffix-icon="el-icon-arrow-down" readonly />
                </div>
              </el-form-item>
              <el-form-item>
                <div slot="label" class="form-item-label">异常处理
                  <el-tooltip content="子流程发起节点人员异常时遵循该规则" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <div class="form-item-content">
                  <el-select v-model="subFlowForm.errorRule" class="mb-10" @change="subFlowForm.errorRuleUser=[]">
                    <el-option label="超级管理员" :value="1"></el-option>
                    <el-option label="指定人员" :value="2"></el-option>
                    <el-option label="发起者本人" :value="6"></el-option>
                  </el-select>
                  <org-select type="user" v-model="subFlowForm.errorRuleUser" title="选择用户" buttonType="button" v-if="subFlowForm.errorRule===2" />
                </div>
              </el-form-item>
              <el-form-item label="子流程发起后自动提交">
                <div slot="label" class="form-item-label">子流程发起后自动提交
                  <el-tooltip content="流程发起的下一节点设置选择分支或候选审批人时无法自动发起审批" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-radio-group class="form-item-content" v-model="subFlowForm.autoSubmit">
                  <el-radio :label="false">否</el-radio>
                  <el-radio :label="true">是</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="节点通知">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="subFlowForm" label-position="top" class="pd-10-20">
              <el-alert title="该通知设置在【消息中心】-【消息发送配置】维护，选择默认则站内信提醒，选择关闭则不提醒。" type="warning" :closable="false" show-icon />
              <el-form-item class="mt-10">
                <div slot="label" class="form-item-label">子流程发起
                  <el-tooltip content="该子流程被发起的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-select class="form-item-content" v-model="subFlowForm.launchMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div class="form-item-content" v-if="subFlowForm.launchMsgConfig.on===1">
                <el-form-item label=" 发送配置">
                  <msg-dialog :value="subFlowForm.launchMsgConfig.msgId" :title="subFlowForm.launchMsgConfig.msgName" @change="onMsgChange('subFlowForm','launchMsgConfig',arguments)" />
                </el-form-item>
                <el-form-item label="参数设置" style="margin-bottom: 0;"></el-form-item>
                <el-table :data="subFlowForm.launchMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
      </el-tabs>
    </section>

    <!-- 发起人 -->
    <section class="approver-pane" v-if="value && isStartNode()">
      <el-tabs style="height:100%;">
        <el-tab-pane label="基础设置">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" :model="startForm" class="pd-10-20">
              <el-form-item>
                <div slot="label" class="form-item-label">{{flowType==1?"功能":"表单"}}设置</div>
                <div class="form-item-content">
                  <flow-form-dialog :value="startForm.formId" :title="startForm.formName" :type="flowType" @change="onStartFormIdChange" :clearable="false" :disabled="!!formInfo.onlineDev" :placeholder='"请选择"+(flowType==1?"功能":"表单")' />
                </div>
              </el-form-item>

              <el-form-item label="扩展绑定外部表单能力,查看详情response">
                <div slot="label" class="form-item-label">扩展绑定外部表单能力,查看详情response
                  <el-tooltip content="该功能可以通过系统表单实现" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-input v-model="startForm.thirdIframeUrl" type="textarea" :rows="3">
                </el-input>
              </el-form-item>

              <el-form-item label="发起设置" v-if="flowType!=1">
                <div slot="label" class="form-item-label">发起设置
                  <el-tooltip content="谁可以发起 默认所有人,需要设置请选择" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <div class="form-item-content">
                  <org-select ref="start-user-org" type="users" v-model="initiator" title="添加发起人" inlet='flow' />
                </div>
              </el-form-item>
              <el-form-item label="抄送设置">
                <div slot="label" class="form-item-label">抄送设置</div>
                <div class="form-item-content">
                  <org-select ref="start-copy-user-org" v-model="startForm.circulateUser" title="添加抄送人" class="mb-5" type="users" inlet='flow' />
                  <el-form-item>
                    <div slot="label">抄送人范围
                      <el-tooltip content="抄送人员增加人员选择范围附加条件" placement="top">
                        <a class="el-icon-question tooltip-question"></a>
                      </el-tooltip>
                    </div>
                    <el-select v-model="startForm.extraCopyRule" filterable>
                      <el-option v-for="(item,i) in extraRuleOptions" :key="i" :label="item.value==1?'无抄送人范围':item.label" :value="item.value" />
                    </el-select>
                  </el-form-item>
                  <el-checkbox v-model="startForm.isCustomCopy">允许自选抄送人</el-checkbox>
                  <div>
                    <el-checkbox v-model="startForm.isFormFieldCopy">抄送给表单变量</el-checkbox>
                  </div>
                  <div v-if="startForm.isFormFieldCopy" class="option-box-tip">选择流程表单字段的值作为抄送人
                  </div>
                  <el-form-item v-if="startForm.isFormFieldCopy">
                    <div class="assignee-form">
                      <el-select v-model="startForm.copyFormFieldType" placeholder="请选择字段" class="form-field-type">
                        <el-option :value="1" label="用户"></el-option>
                        <el-option :value="2" label="部门"></el-option>
                        <el-option :value="3" label="岗位"></el-option>
                        <el-option :value="4" label="角色"></el-option>
                        <el-option :value="5" label="分组"></el-option>
                      </el-select>
                      <el-select v-model="startForm.copyFormField" placeholder="请选择字段" class="form-field" filterable>
                        <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </div>
                  </el-form-item>
                </div>
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="高级设置">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" class="pd-10-20">
              <el-form-item label="操作设置">
                <div slot="label" class="form-item-label">操作设置</div>
                <div class="form-item-content">
                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasSubmitBtn" disabled>提交</el-checkbox>
                    <el-input v-model="startForm.submitBtnText" />
                  </div>
                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasSaveBtn" disabled>暂存</el-checkbox>
                    <el-input v-model="startForm.saveBtnText" />
                  </div>
                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasRevokeBtn">撤回</el-checkbox>
                    <el-input v-model="startForm.revokeBtnText" />
                  </div>
                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasPressBtn">催办</el-checkbox>
                    <el-input v-model="startForm.pressBtnText" />
                  </div>
                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasRestartBtn">复活</el-checkbox>
                    <el-input v-model="startForm.restartBtnText" />
                  </div>

                  <div class="per-cell">
                    <el-checkbox v-model="startForm.hasPrintBtn">打印</el-checkbox>
                    <el-input v-model="startForm.printBtnText" />
                  </div>
                  <div class="per-cell" v-if="startForm.hasPrintBtn">
                    <p style="width:112px"></p>
                    <JnpfTreeSelect :options="printTplList" v-model="startForm.printId" placeholder="请选择打印模板" lastLevel clearable multiple>
                      <div style="padding:10px 0;text-align:center" class="printWrap" slot="header">
                        <el-link type="primary" :underline="false" @click="openPrint">添加打印模板
                        </el-link>
                        <el-link type="info" style="position: absolute;right:8px;top: 18px;" @click="refreshPrintOptions" :underline="false">
                          <i class="el-icon-refresh el-icon--right"></i></el-link>
                        <el-divider></el-divider>
                      </div>
                    </JnpfTreeSelect>
                  </div>
                </div>
              </el-form-item>
              <el-form-item label="标题设置">
                <div slot="label" class="form-item-label">标题设置</div>
                <div class="form-item-content">
                  <el-radio-group v-model="startForm.titleType">
                    <el-radio :label="0">默认</el-radio>
                    <el-radio :label="1">自定义</el-radio>
                  </el-radio-group>
                  <template v-if="startForm.titleType==0">
                    <el-input class="mt-8" v-model="startForm.defaultContent" placeholder="请输入内容" readOnly>
                    </el-input>
                  </template>
                  <template v-if="startForm.titleType==1">
                    <el-autocomplete class="mt-8" v-model="startForm.titleContent" placeholder="请输入内容" style="width:100%" clearable :fetch-suggestions="querySearch" @select="handleSelect">
                    </el-autocomplete>
                  </template>
                </div>
              </el-form-item>
              <el-form-item label="撤回后处理规则" class="form-item-label">
                <div class="form-item-content">
                  <el-select v-model="startForm.revokeRule">
                    <el-option label="撤回后可以重新提交流程" :value="2"></el-option>
                    <el-option label="撤回后终止流程" :value="1"></el-option>
                  </el-select>
                </div>
              </el-form-item>

              <el-form-item label="撤回后数据规则" class="form-item-label" v-if="startForm.revokeRule===2">
                <div class="form-item-content">
                  <el-select v-model="startForm.revokeDataRule">
                    <el-option label="清空之前产生的数据" :value="2"></el-option>
                    <el-option label="不清空" :value="1"></el-option>
                  </el-select>
                </div>
              </el-form-item>
            </el-form>
            <el-form class="pd-10-20" style="margin-top:-20px" label-width="90px" label-position="left">
              <el-form-item>
                <div slot="label" class="form-item-label">允许撤回流程
                  <el-tooltip content="发起人是否允许撤回流程" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.hasRevokeFlag" />
              </el-form-item>
              <el-form-item>
                <div slot="label" class="form-item-label">允许撤销流程
                  <el-tooltip content="发起人是否允许撤销流程" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.hasCancelFlag" />
              </el-form-item>

              <el-form-item>
                <div slot="label" class="form-item-label">手写签名
                  <el-tooltip content="发起人在进行流程撤回操作时需手写签名" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.hasSign" />
              </el-form-item>
              <el-form-item>
                <div slot="label" class="form-item-label">意见填写
                  <el-tooltip content="发起人在进行流程撤回操作需填写意见" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.hasOpinion" />
              </el-form-item>
              <el-form-item>
                <div slot="label" class="form-item-label">审核汇总
                  <el-tooltip content="流程流转记录会按部门及岗位进行汇总展示" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.isSummary" />
              </el-form-item>
              <div v-if="startForm.isSummary" class="form-item-content form-item-content-first">
                <div class="form-sub-title">汇总设置</div>
                <el-select v-model="startForm.summaryType" placeholder="请选择">
                  <el-option label="汇总全部流转记录" :value="0"></el-option>
                  <el-option label="汇总通过及退回流转记录" :value="1"></el-option>
                </el-select>
              </div>
              <el-form-item label="流程评论">
                <div slot="label" class="form-item-label">流程评论
                  <el-tooltip content="流程内涉及的用户均可进行意见评论" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.isComment" />
              </el-form-item>
              <template v-if="startForm.isComment">
                <el-form-item class="form-item-label" label="显示删除">
                  <div slot="label" class="form-item-label">显示删除
                    <el-tooltip content="评论删除后内容在评论区是否显示【该评论已被删除】" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <el-switch v-model="startForm.isShowDelComment" />
                </el-form-item>
                <el-form-item label="提醒方式" class="form-item-label">
                  <el-select v-model="startForm.commentMsgConfig.on" placeholder="请选择" filterable>
                    <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                  </el-select>
                </el-form-item>
                <el-form-item label="发送配置" class="form-item-label" v-if="startForm.commentMsgConfig.on===1">
                  <msg-dialog :value="startForm.commentMsgConfig.msgId" :title="startForm.commentMsgConfig.msgName" :showGoMsgConfig="false" @change="onMsgChange('startForm','commentMsgConfig', arguments)" />
                </el-form-item>
              </template>
              <el-form-item label="批量审批">
                <div slot="label" class="form-item-label">批量审批
                  <el-tooltip content="流程待审批工单可进行批量操作" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="startForm.isBatchApproval" />
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="表单权限">
          <div class="form-auth-table">
            <el-table :data="formOperatesList" class="JNPF-common-table" size="mini" height="100%">
              <el-table-column prop="name" label="表单字段" align="left"></el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,1)" :indeterminate="indeterminateReadFlag" v-model="readAllChecked">查看</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.read" @change="handleCheckedCitiesChange($event,1)">查看</el-checkbox>
                </template>
              </el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,2)" :indeterminate="indeterminateWriteFlag" v-model="writeAllChecked">编辑</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.write" @change="handleCheckedCitiesChange($event,2)">编辑</el-checkbox>
                </template>
              </el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,3)" :indeterminate="indeterminateRequiredFlag" v-model="requiredAllChecked">必填</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.required" :disabled="scope.row.requiredDisabled" @change="handleCheckedCitiesChange($event,3)">必填</el-checkbox>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </el-tab-pane>
        <el-tab-pane label="流程事件">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="startForm" class="pd-10-20" label-position="left">
              <el-alert title="开启后可配置触发事件同时进行参数赋值" type="warning" :closable="false" show-icon />
              <el-form-item label="发起事件" class="mt-10">
                <div slot="label" class="form-item-label">发起事件</div>
                <el-switch v-model="startForm.initFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="startForm.initFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="startForm.initFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="startForm.initFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="startForm.initFuncConfig.interfaceId" :title="startForm.initFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('startForm','initFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.initFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'startForm','initFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item label="结束事件">
                <div slot="label" class="form-item-label">结束事件</div>
                <el-switch v-model="startForm.endFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="startForm.endFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="startForm.endFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="startForm.endFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="startForm.endFuncConfig.interfaceId" :title="startForm.endFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('startForm','endFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.endFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'startForm','endFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>

              <el-form-item label="终止事件">
                <div slot="label" class="form-item-label">终止事件</div>
                <el-switch v-model="startForm.cancelFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="startForm.cancelFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="startForm.cancelFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="startForm.cancelFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="startForm.cancelFuncConfig.interfaceId" :title="startForm.cancelFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('startForm','cancelFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.cancelFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'startForm','cancelFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>

              <el-form-item label="撤回事件">
                <div slot="label" class="form-item-label">撤回事件</div>
                <el-switch v-model="startForm.flowRecallFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="startForm.flowRecallFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="startForm.flowRecallFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="startForm.flowRecallFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="startForm.flowRecallFuncConfig.interfaceId" :title="startForm.flowRecallFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('startForm','flowRecallFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.flowRecallFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'startForm','flowRecallFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>

              
              <!-- 发起节点新增配置 -->
              <el-form-item label="基础事件">
                <div slot="label" class="form-item-label">基础事件</div>
                <el-switch v-model="startForm.baseFuncConfig.on" />
              </el-form-item>

              <el-form-item label="选择事件" class="mt-10" v-if="startForm.baseFuncConfig.on">
                <div slot="label" class="form-item-label">选择事件</div>
                <el-checkbox-group v-model="startForm.baseFuncConfig.eventCodes">
                  <el-checkbox label="start">发起事件</el-checkbox>
                  <el-checkbox label="end">结束事件</el-checkbox>
                  <el-checkbox label="interrupt">终止事件</el-checkbox>
                  <el-checkbox label="start_cancel">发起撤回事件</el-checkbox>
                  <el-checkbox label="approve">同意事件</el-checkbox>
                  <el-checkbox label="reject">退回事件</el-checkbox>
                  <el-checkbox label="end_cancel">节点撤回事件</el-checkbox>
                  <el-checkbox label="timeout">超时事件</el-checkbox>
                  <el-checkbox label="remind">提醒事件</el-checkbox>
                </el-checkbox-group>
              </el-form-item>
              
              <el-form-item label="是否异步" class="mt-10" v-if="startForm.baseFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="startForm.baseFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="startForm.baseFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="startForm.baseFuncConfig.interfaceId" :title="startForm.baseFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('startForm','baseFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.baseFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'startForm','baseFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="流程通知">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="startForm" class="pd-10-20" label-position="top">
              <el-alert title="该通知设置在【消息中心】-【消息发送配置】维护，选择默认则站内信提醒，选择关闭则不提醒。" type="warning" :closable="false" show-icon />

              <el-form-item class="mt-10">
                <div slot="label" class="form-item-label">流程待办
                  <el-tooltip content="流程处于等待的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>

                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.waitMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.waitMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.waitMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.waitMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.waitMsgConfig.msgId" :title="startForm.waitMsgConfig.msgName" @change="onMsgChange('startForm','waitMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.waitMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">流程结束
                  <el-tooltip content="流程结束的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.endMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.endMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.endMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.endMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.endMsgConfig.msgId" :title="startForm.endMsgConfig.msgName" @change="onMsgChange('startForm','endMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.endMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点退回
                  <el-tooltip content="所有节点审核人退回的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.rejectMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.rejectMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.rejectMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.rejectMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.rejectMsgConfig.msgId" :title="startForm.rejectMsgConfig.msgName" @change="onMsgChange('startForm','rejectMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.rejectMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点抄送
                  <el-tooltip content="所有节点抄送的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.copyMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.copyMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.copyMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.copyMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.copyMsgConfig.msgId" :title="startForm.copyMsgConfig.msgName" @change="onMsgChange('startForm','copyMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.copyMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点超时
                  <el-tooltip content="所有节点超时的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.overTimeMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.overTimeMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.overTimeMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.overTimeMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.overTimeMsgConfig.msgId" :title="startForm.overTimeMsgConfig.msgName" @change="onMsgChange('startForm','overTimeMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.overTimeMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点提醒
                  <el-tooltip content="所有节点提醒的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="startForm.noticeMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="startForm.noticeMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="startForm.noticeMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in noticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="startForm.noticeMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="startForm.noticeMsgConfig.msgId" :title="startForm.noticeMsgConfig.msgName" @change="onMsgChange('startForm','noticeMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="startForm.noticeMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>

        <el-tab-pane label="超时处理">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="startForm" class="pd-10-20" label-position="top">
              <el-form-item label="限时设置">
                <div slot="label" class="form-item-label">限时设置</div>
                <el-select class="form-item-content" v-model="startForm.timeLimitConfig.on" placeholder="请选择" filterable @change="onTimeLimitChange($event,'startForm')">
                  <el-option v-for="item in noticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div class="form-item-content" v-if="startForm.timeLimitConfig.on===1">
                <el-form-item label="节点处理截止时间">
                  <div class="countersign-cell">
                    <el-select v-model="startForm.timeLimitConfig.nodeLimit" placeholder="请选择" filterable class='w-500px' disabled>
                      <el-option v-for="item in overTimeOptions" :key="item.value" :label="item.label" :value="item.value" />
                    </el-select>
                    <span class="ml-10px font-color">开始</span>
                  </div>
                  <div class="countersign-cell mt-10px">
                    <span class="w-120px inline-block font-color">流程到达审批节点</span>
                    <el-input-number v-model="startForm.timeLimitConfig.duringDeal" :min="1" :step="1" class="w-200px mx-10px" />
                    <span class="font-color">小时未处理，视为超时。</span>
                  </div>
                </el-form-item>
                <el-form-item label="限时提醒规则">
                  <el-select v-model="startForm.noticeConfig.on" placeholder="请选择" filterable>
                    <el-option v-for="item in noticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                  </el-select>
                  <el-form-item label="" v-if="startForm.noticeConfig.on === 1">
                    <div class="countersign-cell mt-10px">
                      <span class="w-120px inline-block font-color">流程到达审批节点</span>
                      <el-input-number v-model="startForm.noticeConfig.firstOver" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">小时，开始提醒通知。</span>
                    </div>
                    <div class="countersign-cell mt-10px">
                      <span class="w-120px inline-block font-color">每间隔</span>
                      <el-input-number v-model="startForm.noticeConfig.overTimeDuring" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">小时，提醒通知一次。</span>
                    </div>
                    <el-row>超时事务</el-row>
                    <el-row>
                      <el-checkbox v-model="startForm.noticeConfig.overNotice">提醒通知
                        <el-tooltip content="勾选后才能进行提醒消息发送（站内信系统默认发送，第三方超时消息需在节点通知内配置）" placement="top">
                          <a class="el-icon-question tooltip-question"></a>
                        </el-tooltip>
                      </el-checkbox>
                    </el-row>
                    <el-row>
                      <el-checkbox v-model="startForm.noticeConfig.overEvent">提醒事件
                        <el-tooltip content="请在节点事件内配置提醒事件" placement="top">
                          <a class="el-icon-question tooltip-question"></a>
                        </el-tooltip>
                      </el-checkbox>
                    </el-row>
                    <div class="countersign-cell mt-10px" v-if="startForm.noticeConfig.overEvent">
                      <span class="w-120px inline-block font-color">在提醒通知第</span>
                      <el-input-number v-model="startForm.noticeConfig.overTimeDuring" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">次时，执行提醒事件。</span>
                    </div>
                  </el-form-item>
                </el-form-item>
              </div>
              <el-form-item label="超时设置">
                <div slot="label" class="form-item-label">超时设置</div>
                <el-select class="form-item-content" v-model="startForm.overTimeConfig.on" placeholder="请选择" filterable :disabled="startForm.timeLimitConfig.on == 0">
                  <el-option v-for="item in noticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div class="form-item-content" v-if="startForm.overTimeConfig.on===1">
                <div class="countersign-cell">
                  <span class="w-120px inline-block font-color">超时</span>
                  <el-input-number v-model="startForm.overTimeConfig.firstOver" :min="0" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">小时，开始超时通知。</span>
                </div>
                <div class="countersign-cell mt-10px">
                  <span class="w-120px inline-block font-color">每间隔</span>
                  <el-input-number v-model="startForm.overTimeConfig.overTimeDuring" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">小时，超时通知一次。</span>
                </div>
                <el-row>超时事务</el-row>
                <el-row>
                  <el-checkbox v-model="startForm.overTimeConfig.overNotice">超时通知
                    <el-tooltip content="勾选后才能进行超时消息发送（站内信系统默认发送，第三方超时消息需在节点通知内配置）" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <el-row>
                  <el-checkbox v-model="startForm.overTimeConfig.overEvent">超时事件
                    <el-tooltip content="请在节点事件内配置超时事件" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <div class="countersign-cell mt-10px" v-if="startForm.overTimeConfig.overEvent">
                  <span class="w-120px inline-block font-color">在超时通知第</span>
                  <el-input-number v-model="startForm.overTimeConfig.overEventTime" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">次时，执行超时事件。</span>
                </div>
                <el-row>
                  <el-checkbox v-model="startForm.overTimeConfig.overAutoApprove">超时自动审批
                    <el-tooltip content="当前审批节点表单必填字段为空工单流转时不做校验，下一审批节点设置候选人员、选择分支、异常节点时当前审批节点规则失效" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <div class="countersign-cell mt-10px" v-if="startForm.overTimeConfig.overAutoApprove">
                  <span class="w-120px inline-block font-color">在超时通知第</span>
                  <el-input-number v-model="startForm.overTimeConfig.overAutoApproveTime" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">次时，执行超时自动审批。</span>
                </div>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>

        <el-tab-pane label="参数配置">
          <el-scrollbar class="config-scrollbar">
            <params-config v-model="startForm.paramsConfig" />
          </el-scrollbar>
        </el-tab-pane>
      </el-tabs>
    </section>
    <!-- 审批人 -->
    <section class="approver-pane" v-if="value && isApproverNode()">
      <el-tabs v-model="activeName" style="height:100%;">
        <el-tab-pane label="人员设置" name="config">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" :model="approverForm" class="pd-10-20">
              <el-form-item label="审批人员设置">
                <el-alert title="系统预置N种钩子,可扩展多种以及任何找人方式" type="warning" :closable="false" show-icon />
                <div slot="label" class="form-item-label">审批设置</div>
                <div class="form-item-content">
                  <el-radio-group v-model="approverForm.assigneeType" @change="resetOrgColl">
                    <el-radio v-for="item in assigneeTypeOptions" :label="item.value" :key="item.value" :disabled="item.disabled" class="radio-item">{{item.label}}
                    </el-radio>
                  </el-radio-group>

                  <div v-if="approverForm.assigneeType === 3" class="option-box-tip">
                    发起者自己将作为审批人处理审批单</div>
                  <div v-if="approverForm.assigneeType === 1" class="option-box-tip">
                    <el-alert title="发起者主管将作为审批人处理审批单,一般指汇报线主管，不在上级部门中，但相关业务向该主管汇报!
                      该主管设置在【组织管理】-【用户管理】-【编辑或新增】-【直属主管配置】" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="approverForm.assigneeType === 13" class="option-box-tip">
                    <el-alert title="部门控件的对应主管将进行审批" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="[2, 15, 16].includes(approverForm.assigneeType)" class="option-box-tip">
                    <el-alert :title="leaderTipTitle(approverForm.assigneeType)" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="approverForm.assigneeType === 10" class="option-box-tip">
                    <el-alert title="发起者的连续多级主管将作为审批人处理审批单,一般指汇报线主管，不在上级部门中，但相关业务向该主管汇报!
                        该主管设置在【组织管理】-【用户管理】-【编辑或新增】-【直属主管配置】" type="warning" :closable="false" show-icon />
                  </div>
                  <div v-if="approverForm.assigneeType === 11" class="option-box-tip">
                    <el-alert title="发起者的部门主管将作为审批人处理审批单,先找到发起人所在的部门,然后在【组织管理】-【组织管理】-【编辑或新增】-【部门主管配置项】" type="warning" :closable="false" show-icon />
                  </div>
                </div>

                <div v-if="approverForm.assigneeType === 6" class="option-box-tip">

                  <el-alert title="该选项和五为一!!!  可以同时指定审批人\角色\部门\岗位\分组 ---- 处理审批单" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="approverForm.assigneeType === 12" class="option-box-tip">

                  <el-alert title="指定多个部门 最终由多个部门的主管 处理审批单" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="approverForm.assigneeType === 14" class="option-box-tip">

                  <el-alert title="某一环节审批过的人" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="approverForm.assigneeType === 4" class="option-box-tip">

                  <el-alert title="选择流程表单字段的值作为审批人" type="warning" :closable="false" show-icon />
                </div>
                <div v-if="approverForm.assigneeType === 5" class="option-box-tip">

                  <el-alert title="设置审批人为审批流程中某个环节的审批人" type="warning" :closable="false" show-icon />
                </div>

                <div v-if="approverForm.assigneeType === 7" class="option-box-tip">

                  <el-alert title="该选项比较特殊,该选项专门为上一节点给下一节点指定审批人专用!可以搭配选择分支食用更佳!" type="warning" :closable="false" show-icon />
                </div>
                <div v-if="approverForm.assigneeType === 9" class="option-box-tip">

                  <el-alert title="从目标服务接口中中获取审批人" type="warning" :closable="false" show-icon />
                </div>
                <el-form-item label="发起者的" style="margin-bottom:0!important" v-if="approverForm.assigneeType === 1 || approverForm.assigneeType === 10">
                  <el-select v-model="approverForm.managerLevel" filterable>
                    <el-option v-for="item in 10" :key="item" :label="item===1?'直属主管':'第'+item+'级主管'" :value="item">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 10">
                  <el-switch v-model="approverForm.orderFlag" active-text="自上而下" inactive-text="自下而上" />
                </el-form-item>

                <el-form-item label="发起者的" style="margin-bottom:0!important;" v-if="[2, 11, 15, 16].includes(approverForm.assigneeType) || approverForm.assigneeType === 11">
                  <el-select v-model="approverForm.departmentLevel" filterable>
                    <el-option v-for="item in 10" :key="item" :label="startUserLabel(approverForm.assigneeType, item)" :value="item">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item style="margin-bottom:0!important;" v-if="approverForm.assigneeType === 11">
                  <el-checkbox v-model="approverForm.noLeaderFlag" :true-label="1" :false-label="0">找不到主管时，是否跳过该级,继续查询</el-checkbox>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 11">
                  <el-switch v-model="approverForm.orderFlag" active-text="自上而下" inactive-text="自下而上" />
                </el-form-item>

                <el-form-item label="表单字段" style="margin-bottom:0" v-if="approverForm.assigneeType === 4">
                  <div class="assignee-form">
                    <el-select v-model="approverForm.formFieldType" placeholder="请选择字段" class="form-field-type">
                      <el-option :value="1" label="用户"></el-option>
                      <el-option :value="2" label="部门"></el-option>
                      <el-option :value="3" label="岗位"></el-option>
                      <el-option :value="4" label="角色"></el-option>
                      <el-option :value="5" label="分组"></el-option>
                    </el-select>
                    <el-select v-model="approverForm.formField" placeholder="请选择字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </div>
                </el-form-item>
                <el-form-item label="审批节点" style="margin-bottom:0!important" v-if="approverForm.assigneeType === 5 || approverForm.assigneeType === 14">
                  <el-select v-model="approverForm.nodeId" placeholder="请选择节点" filterable>
                    <el-option v-for="item in nodeOptions" :key="item.nodeId" :label="item.properties.title" :value="item.nodeId">
                    </el-option>
                  </el-select>
                </el-form-item>

                <el-form-item label="表单字段" style="margin-bottom:0" v-if="approverForm.assigneeType === 13">
                  <div class="assignee-form">
                    <el-select v-model="approverForm.formFieldType" placeholder="请选择字段" class="form-field-type">
                      <el-option :value="1" label="用户"></el-option>
                      <el-option :value="2" label="部门"></el-option>
                    </el-select>
                    <el-select v-model="approverForm.formField" placeholder="请选择字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </div>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 9">
                  <div slot="label">请求路径
                    <el-tooltip placement="top" content='请求自带参数：taskId、taskNodeId，返回结构：JSON对象{"handleId":"id1,id2"}'>
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <el-form-item label-width="0">
                    <interface-dialog :value="approverForm.interfaceConfig.interfaceId" :title="approverForm.interfaceConfig.interfaceName" :sourceType="1" @change="onFuncChange('approverForm','interfaceConfig',arguments)" />
                  </el-form-item>
                  <div class="form-sub-title">参数设置</div>
                  <el-table :data="approverForm.interfaceConfig.templateJson">
                    <el-table-column type="index" width="50" label="序号" align="center" />
                    <el-table-column prop="field" label="参数名称" width="150">
                      <template slot-scope="scope">
                        <span class="required-sign">{{scope.row.required?'*':''}}</span>
                        {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                      </template>
                    </el-table-column>
                    <el-table-column prop="field" label="参数来源" width="120">
                      <template slot-scope="scope">
                        <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','interfaceConfig')">
                          <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                          </el-option>
                        </el-select>
                      </template>
                    </el-table-column>
                    <el-table-column prop="value" label="表单字段">
                      <template slot-scope="scope">
                        <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                          <el-option-group v-if="scope.row.required">
                            <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                          </el-option-group>
                          <el-option-group v-else>
                            <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                          </el-option-group>
                        </el-select>
                        <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-select>
                        <template v-else-if="scope.row.sourceType == 2">
                          <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                          <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                          <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                        </template>
                      </template>
                    </el-table-column>
                  </el-table>
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 6||approverForm.assigneeType === 7">
                  <org-select ref="approver-user-org" type="users" :title="approverForm.assigneeType === 6?'添加审批人':'添加候选人'" v-model="approverForm.approvers" inlet='flow' @change="onApproversChange" />
                </el-form-item>
                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 12">
                  <JnpfPosSelect v-model="approverForm.deptIds" placeholder="请选择" clearable multiple />
                </el-form-item>

                <el-form-item style="margin-bottom:0!important" v-if="approverForm.assigneeType === 6">
                  <div slot="label">审批人范围
                    <el-tooltip content="指定成员增加人员选择范围附加条件" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <el-select v-model="approverForm.extraRule" filterable>
                    <el-option v-for="(item,i) in extraRuleOptions" :key="i" :label="item.label" :value="item.value" />
                  </el-select>
                </el-form-item>
                </div>
              </el-form-item>
              <el-form-item label="审批方式">
                <div slot="label" class="form-item-label">审批方式</div>
                <div class="form-item-content">
                  <el-radio v-model="approverForm.counterSign" :label="0">
                    或签（一名审批人同意或退回即可）</el-radio>
                  <el-radio v-model="approverForm.counterSign" :label="1">
                    会签（无序会签，当审批达到会签比例时，则该审批通过）</el-radio>
                  <el-radio v-model="approverForm.counterSign" :label="2">
                    依次审批（按顺序依次审批）</el-radio></br>
                  <el-radio v-model="approverForm.counterSign" :label="3" disabled>
                    动态会签(参考前后加签功能的时候是支持指定会签还是串签)</el-radio></br>
                  <el-radio v-model="approverForm.counterSign" :label="4" disabled>
                    投票会签(该节点下添加条件分支-条件分支有票数判断!意见判断等)</el-radio>
                </div>
              </el-form-item>
              <el-form-item label="设置会签流转规则" v-if="approverForm.counterSign==1 || approverForm.counterSign==2 ">
                <div class="countersign-cell mb-10">
                  <span class="w-70px inline-block">同意规则</span>
                  <el-select class="countersign-cell-item" v-model="approverForm.counterSignConfig.auditType">
                    <el-option v-for="item in auditTypeOptions" :key="item.id" :label="item.fullName" :value="item.id">
                    </el-option>
                  </el-select>
                  <el-select class="countersign-cell-item" v-if="approverForm.counterSignConfig.auditType === 1" v-model="approverForm.counterSignConfig.auditRatio">
                    <el-option v-for="item in 10" :key="item*10" :label="item*10+'%'" :value="item*10">
                    </el-option>
                  </el-select>
                  <el-input-number class="countersign-cell-item" v-model="approverForm.counterSignConfig.auditNum" placeholder="人数" :precision="0" :min="1" @change="onSignNumberChange($event, 'auditNum')" v-if="approverForm.counterSignConfig.auditType === 2" controls-position="right" />
                  <span>同意时进入下一节点</span>
                </div>
                <div class="countersign-cell">
                  <span class="w-70px inline-block">不同意规则</span>
                  <el-select class="countersign-cell-item" v-model="approverForm.counterSignConfig.rejectType">
                    <el-option v-for="item in rejectTypeOptions" :key="item.id" :label="item.fullName" :value="item.id">
                    </el-option>
                  </el-select>
                  <el-select class="countersign-cell-item" v-if="approverForm.counterSignConfig.rejectType === 1" v-model="approverForm.counterSignConfig.rejectRatio">
                    <el-option v-for="item in 10" :key="item*10" :label="item*10+'%'" :value="item*10">
                    </el-option>
                  </el-select>
                  <el-input-number class="countersign-cell-item" v-model="approverForm.counterSignConfig.rejectNum" placeholder="人数" :precision="0" :min="1" @change="onSignNumberChange($event, 'rejectNum')" v-if="approverForm.counterSignConfig.rejectType === 2" controls-position="right" />
                  <span v-if="approverForm.counterSignConfig.rejectType">不同意时退回</span>
                </div>
              </el-form-item>
              <el-form-item label="设置依次审批顺序" v-if="getCanSetApproversSort">
                <div slot="label" class="form-item-label">设置依次审批顺序</div>
                <el-button preIcon="icon-ym icon-ym-btn-add" @click="openApproversSortListModal">设置审批顺序</el-button>
              </el-form-item>

              <el-form-item label="审批人为空时">
                <el-select v-model="approverForm.noAssignee" placeholder="请选择">
                  <el-option label="自动通过" value="1"></el-option>
                  <el-option label="自动驳回" value="2"></el-option>
                  <el-option label="转交给管理员" value="3"></el-option>
                  <el-option label="转交给指定人" value="4"></el-option>
                  <el-option label="提示异常" value="5"></el-option>
                </el-select>
              </el-form-item>

              <el-form-item style="margin-bottom:0!important" v-if="approverForm.noAssignee ==4">
                <org-select ref="approver-user-org" type="users" title="添加审批人" v-model="approverForm.autoTransferAssignee" inlet='flow' />
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="基础设置" name="baseEx">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" :model="approverForm" class="pd-10-20">
              <template v-if="flowType!==1">
                <el-form-item>
                  <div slot="label" class="form-item-label">表单配置
                    <el-tooltip content="审批节点不配置表单，默认引用发起节点表单" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <div class="form-item-content">
                    <flow-form-dialog :value="approverForm.formId" :title="approverForm.formName" :type="flowType" @change="onApproverFormIdChange" placeholder="请选择表单" />
                  </div>
                </el-form-item>
                <el-form-item>
                  <div v-if="approverForm.formId" class="option-box-tip">
                    是否开启节点实例表单,用作审批填报收集功能</div>
                  <el-switch v-if="approverForm.formId" v-model="approverForm.taskFormEnabled" />
                </el-form-item>
                <el-form-item>
                  <div slot="label" class="form-item-label">数据传递
                    <el-tooltip content="设置传递规则时会按传递规则赋值,多个节点给一个节点传递时,同一字段会按照先后顺序覆盖" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </div>
                  <div class="form-item-content hand" @click="openApproverTransmitRuleBox">
                    <el-input class="hand" :value="approverForm.assignList.length?'已设置':''" placeholder="请设置数据传递规则" suffix-icon="el-icon-arrow-down" readonly />
                  </div>
                </el-form-item>
              </template>
              <el-form-item label="退回设置">
                <div slot="label" class="form-item-label">退回设置
                  <el-tooltip content="对应 高级设置 中 退回按钮的操作" placement="top">
                    <i class="el-icon-question tooltip-question"></i>
                  </el-tooltip>
                </div>
                <div class="form-item-content">被退回的节点重新提交时</div>
                <el-radio-group v-model="approverForm.rejectType" class="form-item-content" @input="radioInput">
                  <el-radio :label="1">重新审批
                    <el-tooltip content="若流程为A->B->C,C退回至A，则C->A->B->C" placement="top">
                      <i class="el-icon-question tooltip-question"></i>
                    </el-tooltip>
                  </el-radio>
                  <el-radio :label="2">从当前节点审批
                    <el-tooltip content="若流程为A->B->C,C退回至A，则C->A->C" placement="top">
                      <i class="el-icon-question tooltip-question"></i>
                    </el-tooltip>
                  </el-radio>
                  <el-radio :label="3">自定义审批
                    <el-tooltip content="由用户选择重新审批或从当前节点审批" placement="top">
                      <i class="el-icon-question tooltip-question"></i>
                    </el-tooltip>
                  </el-radio>
                </el-radio-group>
                <div class="form-item-content">设置退回到的节点</div>
                <el-select class="form-item-content" v-model="approverForm.rejectStep" placeholder="请选择" filterable>
                  <el-option v-for="item in rejectStepOptions" :key="item.nodeId" :label="item.properties.title" :value="item.nodeId">
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="进度设置">
                <div slot="label" class="form-item-label">进度设置</div>
                <el-select class="form-item-content" v-model="approverForm.progress" placeholder="请选择" filterable>
                  <el-option v-for="item in progressOptions" :key="item" :label="item+'%'" :value="item">
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="抄送设置">
                <div slot="label" class="form-item-label">抄送设置</div>
                <div class="form-item-content">
                  <org-select ref="approver-copy-user-org" v-model="approverForm.circulateUser" title="添加抄送人" class="mb-5" type="users" inlet='flow' />
                  <el-form-item>
                    <div slot="label">抄送人范围
                      <el-tooltip content="抄送人员增加人员选择范围附加条件" placement="top">
                        <a class="el-icon-question tooltip-question"></a>
                      </el-tooltip>
                    </div>
                    <el-select v-model="approverForm.extraCopyRule" filterable>
                      <el-option v-for="(item,i) in extraRuleOptions" :key="i" :label="item.value==1?'无抄送人范围':item.label" :value="item.value" />
                    </el-select>
                  </el-form-item>
                  <el-checkbox v-model="approverForm.isCustomCopy">允许自选抄送人</el-checkbox>
                  <div>
                    <el-checkbox v-model="approverForm.isInitiatorCopy">抄送给流程发起人</el-checkbox>
                  </div>
                  <div>
                    <el-checkbox v-model="approverForm.isFormFieldCopy">抄送给表单变量</el-checkbox>
                  </div>
                  <div v-if="approverForm.isFormFieldCopy" class="option-box-tip">选择流程表单字段的值作为抄送人
                  </div>
                  <el-form-item v-if="approverForm.isFormFieldCopy">
                    <div class="assignee-form">
                      <el-select v-model="approverForm.copyFormFieldType" placeholder="请选择字段" class="form-field-type">
                        <el-option :value="1" label="用户"></el-option>
                        <el-option :value="2" label="部门"></el-option>
                        <el-option :value="3" label="岗位"></el-option>
                        <el-option :value="4" label="角色"></el-option>
                        <el-option :value="5" label="分组"></el-option>
                      </el-select>
                      <el-select v-model="approverForm.copyFormField" placeholder="请选择字段" class="form-field" filterable>
                        <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </div>
                  </el-form-item>
                </div>
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="高级设置" name="senior">
          <el-scrollbar class="config-scrollbar">
            <el-form label-position="top" class="pd-10-20">
              <el-form-item label="操作设置">
                <div slot="label" class="form-item-label">操作设置</div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasSaveBtn">暂存</el-checkbox>
                  <el-input v-model="approverForm.saveBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasAuditBtn">同意</el-checkbox>
                  <el-input v-model="approverForm.auditBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasCancelBtn">不同意</el-checkbox>
                  <el-input v-model="approverForm.cancelBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasAbstentionBtn">弃权</el-checkbox>
                  <el-input v-model="approverForm.abstentionBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasRejectBtn">退回</el-checkbox>
                  <el-input v-model="approverForm.rejectBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasJumpBtn">特送</el-checkbox>
                  <el-input v-model="approverForm.jumpBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasRevokeBtn">撤回</el-checkbox>
                  <el-input v-model="approverForm.revokeBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasTransferBtn">转审</el-checkbox>
                  <el-input v-model="approverForm.transferBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasInvokeBtn">委派</el-checkbox>
                  <el-input v-model="approverForm.invokeBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasCopyBtn">抄送</el-checkbox>
                  <el-input v-model="approverForm.copyBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasTerminationBtn">终止</el-checkbox>
                  <el-input v-model="approverForm.terminationBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasMultiAddBtn">并加签</el-checkbox>
                  <el-input v-model="approverForm.multiAddBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasLockOrUnLockBtn">锁定</el-checkbox>
                  <el-input v-model="approverForm.lockOrUnLockBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasAssistBtn">协办</el-checkbox>
                  <el-input v-model="approverForm.assistBtnText" />
                </div>

                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasMultiRemoveBtn">减签</el-checkbox>
                  <el-input v-model="approverForm.multiRemoveBtnText" />
                </div>
                <div class="per-cell">
                  <el-checkbox v-model="approverForm.hasPrintBtn">打印</el-checkbox>
                  <el-input v-model="approverForm.printBtnText" />
                </div>
                <div class="per-cell" v-if="approverForm.hasPrintBtn">
                  <p style="width:112px"></p>
                  <JnpfTreeSelect :options="printTplList" v-model="approverForm.printId" placeholder="请选择打印模板" lastLevel clearable multiple>
                    <div class="printWrap" slot="header">
                      <el-link type="primary" :underline="false" @click="openPrint">添加打印模板
                      </el-link>
                      <el-link type="info" style="position: absolute;right:8px;top: 18px;" @click="refreshPrintOptions" :underline="false">
                        <i class="el-icon-refresh el-icon--right"></i></el-link>
                      <el-divider></el-divider>
                    </div>
                  </JnpfTreeSelect>
                </div>
                <div class="per-cell">
                  <div slot="label" class="has-free-approver ">
                    <el-checkbox v-model="approverForm.hasFreeApproverBtn">前后加签<el-tooltip content="允许在审批单中增加临时审批人" placement="top">
                        <a class="el-icon-question tooltip-question form-item-approver"></a>
                      </el-tooltip>
                    </el-checkbox>
                  </div>
                  <el-input v-model="approverForm.hasFreeApproverBtnText" />
                </div>
              </el-form-item>
            </el-form>
            <el-form class="pd-10-20" style="margin-top:-20px" label-width="105px" label-position="left">
              <el-form-item label="自动同意">
                <div slot="label" class="form-item-label">自动同意
                  <el-tooltip content="当前审批节点表单必填字段为空工单流转时不做校验，下一审批节点设置候选人员、选择分支、异常节点时当前审批节点规则失效" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="approverForm.hasAgreeRule" />
              </el-form-item>
              <div class="form-item-content form-item-content-first" v-show="approverForm.hasAgreeRule">
                <div class="form-sub-title">同意规则配置</div>
                <el-row>
                  <el-select v-model="approverForm.agreeRules" multiple>
                    <el-option label="审批人为发起人" :value="2"></el-option>
                    <el-option label="审批人与上一审批节点处理人相同(相邻节点)" :value="3"></el-option>
                    <el-option label="审批人审批过" :value="4"></el-option>
                    <el-option label="无条件自动通过" :value="5"></el-option>
                  </el-select>
                </el-row>
              </div>

              <el-form-item>
                <div slot="label" class="form-item-label">手写签名
                  <el-tooltip content="审批人在进行审批操作时需手写签名" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="approverForm.hasSign" />
              </el-form-item>

              <el-form-item label="手写签名回显设置">
                <el-tooltip content="回显签名框请使用签名控件对应" placement="top">
                  <a class="el-icon-question tooltip-question"></a>
                </el-tooltip>
                <div slot="label" class="form-item-label">手写签名回显设置</div>
                <div class="form-item-content">
                  <el-radio-group v-model="approverForm.signType">
                    <el-radio :label="0">不回显</el-radio>
                    <el-radio :label="1">回显</el-radio>
                  </el-radio-group>
                  <template v-if="approverForm.signType==1">
                    <el-select v-model="approverForm.signField" placeholder="请选择回显字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </template>
                </div>
              </el-form-item>

              <el-form-item>
                <div slot="label" class="form-item-label">意见填写
                  <el-tooltip content="审批人在进行审批操作需填写意见" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-switch v-model="approverForm.hasOpinion" />
              </el-form-item>

              <el-form-item label="审批意见回显设置">
                <el-tooltip content="回显意见框请使用多行文本框,因为审批意见有很多字!" placement="top">
                  <a class="el-icon-question tooltip-question"></a>
                </el-tooltip>
                <div slot="label" class="form-item-label">审批意见回显设置</div>
                <div class="form-item-content">
                  <el-radio-group v-model="approverForm.commentType">
                    <el-radio :label="0">不回显</el-radio>
                    <el-radio :label="1">自定义</el-radio>
                  </el-radio-group>
                  <template v-if="approverForm.commentType==1">
                    <el-autocomplete class="mt-8" v-model="approverForm.commentContent" placeholder="请输入回显意见内容" style="width:100%" clearable :fetch-suggestions="querySearch" @select="handleCommentSelect">
                    </el-autocomplete>

                    <el-select v-model="approverForm.commentField" placeholder="请选择回显字段" class="form-field" filterable>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </template>
                </div>
              </el-form-item>

              <el-form-item label="说明">
                <div slot="label" class="form-item-label">说明</div>
                <el-input v-model="approverForm.description" type="textarea" :rows="3">
                </el-input>
              </el-form-item>
              <el-form-item label="扩展绑定外部表单能力,查看详情response">
                <div slot="label" class="form-item-label">扩展绑定外部表单能力,查看详情response
                  <el-tooltip content="该功能可以通过系统表单实现" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                </div>
                <el-input v-model="approverForm.thirdIframeUrl" type="textarea" :rows="3">
                </el-input>
              </el-form-item>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="表单权限" name="formAuth">
          <div class="form-auth-table">
            <el-table :data="formOperatesList" class="JNPF-common-table" size="mini" height="100%">
              <el-table-column prop="name" label="表单字段" align="left"></el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,1)" :indeterminate="indeterminateReadFlag" v-model="readAllChecked">查看</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.read" @change="handleCheckedCitiesChange($event,1)">查看</el-checkbox>
                </template>
              </el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,2)" :indeterminate="indeterminateWriteFlag" v-model="writeAllChecked">编辑</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.write" @change="handleCheckedCitiesChange($event,2)">编辑</el-checkbox>
                </template>
              </el-table-column>
              <el-table-column width="80">
                <template slot="header">
                  <el-checkbox @change="updateReadAllSelected($event,3)" :indeterminate="indeterminateRequiredFlag" v-model="requiredAllChecked">必填</el-checkbox>
                </template>
                <template slot-scope="scope">
                  <el-checkbox v-model="scope.row.required" :disabled="scope.row.requiredDisabled" @change="handleCheckedCitiesChange($event,3)">必填</el-checkbox>
                </template>
              </el-table-column>
            </el-table>
          </div>
        </el-tab-pane>
        <el-tab-pane label="节点事件">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="approverForm" class="pd-10-20" label-position="left">
              <el-alert title="开启后可配置触发事件同时进行参数赋值" type="warning" :closable="false" show-icon />
              <el-form-item label="同意事件" class="mt-10">
                <div slot="label" class="form-item-label">同意事件</div>
                <el-switch v-model="approverForm.approveFuncConfig.on" />
              </el-form-item>
              <el-form-item label="是否异步" class="mt-10" v-if="approverForm.approveFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="approverForm.approveFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="approverForm.approveFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="approverForm.approveFuncConfig.interfaceId" :title="approverForm.approveFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('approverForm','approveFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.approveFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','approveFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="参数值">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>

              <el-form-item label="退回事件">
                <div slot="label" class="form-item-label">退回事件</div>
                <el-switch v-model="approverForm.rejectFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="approverForm.rejectFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="approverForm.rejectFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="approverForm.rejectFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="approverForm.rejectFuncConfig.interfaceId" :title="approverForm.rejectFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('approverForm','rejectFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.rejectFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','rejectFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item label="撤回事件">
                <div slot="label" class="form-item-label">撤回事件</div>
                <el-switch v-model="approverForm.recallFuncConfig.on" />
              </el-form-item>
              <el-form-item label="是否异步" class="mt-10" v-if="approverForm.recallFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="approverForm.recallFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="approverForm.recallFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="approverForm.recallFuncConfig.interfaceId" :title="approverForm.recallFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('approverForm','recallFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.recallFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','recallFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item label="超时事件" class="mt-10">
                <div slot="label" class="form-item-label">超时事件</div>
                <el-switch v-model="approverForm.overTimeFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="approverForm.overTimeFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="approverForm.overTimeFuncConfig.asyncEvent" />
              </el-form-item>
              <div class="form-item-content form-item-content-first" v-if="approverForm.overTimeFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="approverForm.overTimeFuncConfig.interfaceId" :title="approverForm.overTimeFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('approverForm','overTimeFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.overTimeFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','overTimeFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item label="提醒事件" class="mt-10">
                <div slot="label" class="form-item-label">提醒事件</div>
                <el-switch v-model="approverForm.noticeFuncConfig.on" />
              </el-form-item>

              <el-form-item label="是否异步" class="mt-10" v-if="approverForm.noticeFuncConfig.on">
                <div slot="label" class="form-item-label">是否异步</div>
                <el-switch v-model="approverForm.noticeFuncConfig.asyncEvent" />
              </el-form-item>

              <div class="form-item-content form-item-content-first" v-if="approverForm.noticeFuncConfig.on">
                <div class="form-sub-title">接口设置</div>
                <el-form-item label-width="0">
                  <interface-dialog :value="approverForm.noticeFuncConfig.interfaceId" :title="approverForm.noticeFuncConfig.interfaceName" :sourceType="3" @change="onFuncChange('approverForm','noticeFuncConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.noticeFuncConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <span class="required-sign">{{scope.row.required?'*':''}}</span>
                      {{scope.row.fieldName?scope.row.field+'('+scope.row.fieldName+')':scope.row.field}}
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数来源" width="120">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.sourceType" placeholder="请选择参数来源" @change="onChangeRelationField(scope.$index,'approverForm','noticeFuncConfig')">
                        <el-option v-for="item in parameterSource(scope.row.required)" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select v-model="scope.row.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,scope.row)" v-if="scope.row.sourceType == 1">
                        <el-option-group v-if="scope.row.required">
                          <el-option v-for="item in funcRequiredOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group v-else>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                      <el-select v-model="scope.row.relationField" placeholder="请选择系统变量字段" clearable v-else-if="scope.row.sourceType == 4">
                        <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                      </el-select>
                      <template v-else-if="scope.row.sourceType == 2">
                        <JnpfInputNumber v-if="['int', 'decimal'].includes(scope.row.dataType)" v-model="scope.row.relationField" placeholder="请输入参数值" clearable controls controlsPosition='right' class="input-number" />
                        <JnpfDatePicker v-else-if="scope.row.dataType == 'datetime'" style="width:100%" v-model="scope.row.relationField" placeholder="请选择参数值" format="yyyy-MM-dd HH:mm:ss" clearable />
                        <el-input v-model="scope.row.relationField" placeholder="请输入参数值" clearable v-else />
                      </template>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>
        <el-tab-pane label="节点通知">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="approverForm" class="pd-10-20" label-position="top">
              <el-alert title="该通知设置在【消息中心】-【消息发送配置】维护，选择默认则站内信提醒，选择关闭则不提醒。" type="warning" :closable="false" show-icon />
              <el-form-item class="mt-10">
                <div slot="label" class="form-item-label">流程待办
                  <el-tooltip content="流程处于等待" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="approverForm.waitMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="approverForm.waitMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="approverForm.waitMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in nodeNoticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="approverForm.waitMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="approverForm.waitMsgConfig.msgId" :title="approverForm.waitMsgConfig.msgName" @change="onMsgChange('approverForm','waitMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.waitMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点退回
                  <el-tooltip content="当前节点审核人退回的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="approverForm.rejectMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="approverForm.rejectMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="approverForm.rejectMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in nodeNoticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="approverForm.rejectMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="approverForm.rejectMsgConfig.msgId" :title="approverForm.rejectMsgConfig.msgName" @change="onMsgChange('approverForm','rejectMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.rejectMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点抄送
                  <el-tooltip content="当前节点抄送的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="approverForm.copyMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="approverForm.copyMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="approverForm.copyMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in nodeNoticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="approverForm.copyMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="approverForm.copyMsgConfig.msgId" :title="approverForm.copyMsgConfig.msgName" @change="onMsgChange('approverForm','copyMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.copyMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option-group>
                          <el-option v-for="item in systemFieldOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                        <el-option-group>
                          <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__" />
                        </el-option-group>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点超时
                  <el-tooltip content="当前节点超时的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="approverForm.overTimeMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="approverForm.overTimeMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="approverForm.overTimeMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in nodeNoticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="approverForm.overTimeMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="approverForm.overTimeMsgConfig.msgId" :title="approverForm.overTimeMsgConfig.msgName" @change="onMsgChange('approverForm','overTimeMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.overTimeMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
              <el-form-item>
                <div slot="label" class="form-item-label">节点提醒
                  <el-tooltip content="当前节点提醒的时候" placement="top">
                    <a class="el-icon-question tooltip-question"></a>
                  </el-tooltip>
                  <div slot="label" class="form-item-label">是否异步</div>
                  <el-switch v-model="approverForm.noticeMsgConfig.asyncEvent" />
                  <org-select ref="start-copy-user-org" v-model="approverForm.noticeMsgConfig.notifyUsers" title="添加额外通知人" class="mb-5" type="users" inlet='flow' />
                </div>
                <el-select class="form-item-content" v-model="approverForm.noticeMsgConfig.on" placeholder="请选择" filterable>
                  <el-option v-for="item in nodeNoticeOptionsData" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div style="margin-bottom: 18px;" class="form-item-content" v-if="approverForm.noticeMsgConfig.on===1">
                <el-form-item label="发送配置">
                  <msg-dialog :value="approverForm.noticeMsgConfig.msgId" :title="approverForm.noticeMsgConfig.msgName" @change="onMsgChange('approverForm','noticeMsgConfig',arguments)" />
                </el-form-item>
                <div class="form-sub-title">参数设置</div>
                <el-table :data="approverForm.noticeMsgConfig.templateJson">
                  <el-table-column type="index" width="50" label="序号" align="center" />
                  <el-table-column prop="field" label="模板名称" width="150">
                    <template slot-scope="scope">
                      <el-link @click='goDetail(scope.row.templateId)'>{{scope.row.msgTemplateName}}
                      </el-link>
                    </template>
                  </el-table-column>
                  <el-table-column prop="field" label="参数名称" width="150">
                    <template slot-scope="scope">
                      <div class="parameter-box" v-for="(item,index) in scope.row.paramJson" :key="index" :title="item.field+'('+item.fieldName+')'">
                        {{item.field}}({{item.fieldName}})
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="value" label="表单字段">
                    <template slot-scope="scope">
                      <el-select class="variable-box" v-model="it.relationField" placeholder="请选择表单字段" clearable filterable @change="onRelationFieldChange($event,it)" v-for="(it,index) in scope.row.paramJson" :key="index">
                        <el-option v-for="item in funcOptions" :key="item.__vModel__" :label="item.__config__.label?item.__vModel__+'('+item.__config__.label+')':item.__vModel__" :value="item.__vModel__">
                        </el-option>
                      </el-select>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>

        <el-tab-pane label="超时处理">
          <el-scrollbar class="config-scrollbar">
            <el-form :model="approverForm" class="pd-10-20" label-position="top">
              <el-form-item label="限时设置">
                <div slot="label" class="form-item-label">限时设置</div>
                <el-select class="form-item-content" v-model="approverForm.timeLimitConfig.on" placeholder="请选择" filterable @change="onTimeLimitChange($event,'approverForm')">
                  <el-option v-for="item in nodeNoticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div class="form-item-content" v-if="approverForm.timeLimitConfig.on===1">
                <el-form-item label="节点处理截止时间">
                  <div class="countersign-cell">
                    <el-select v-model="approverForm.timeLimitConfig.nodeLimit" placeholder="请选择" filterable class='w-500px'>
                      <el-option v-for="item in overTimeOptions" :key="item.value" :label="item.label" :value="item.value" />
                    </el-select>
                    <span class="ml-10px font-color">开始</span>
                  </div>
                  <div class="mt-10px" v-if="approverForm.timeLimitConfig.nodeLimit === 2">
                    <el-select v-model="approverForm.timeLimitConfig.formField" placeholder="请选择字段" filterable class='w-500px'>
                      <el-option v-for="item in usedFormItems" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__">
                      </el-option>
                    </el-select>
                  </div>
                  <div class="countersign-cell mt-10px">
                    <span class="w-120px inline-block font-color">流程到达审批节点</span>
                    <el-input-number v-model="approverForm.timeLimitConfig.duringDeal" :min="1" :step="1" class="w-200px mx-10px" />
                    <span class="font-color">小时未处理，视为超时。</span>
                  </div>
                </el-form-item>
                <el-form-item label="限时提醒规则">
                  <el-select v-model="approverForm.noticeConfig.on" placeholder="请选择" filterable>
                    <el-option v-for="item in nodeNoticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                  </el-select>
                  <el-form-item label="" v-if="approverForm.noticeConfig.on === 1">
                    <div class="countersign-cell mt-10px">
                      <span class="w-120px inline-block font-color">流程到达审批节点</span>
                      <el-input-number v-model="approverForm.noticeConfig.firstOver" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">小时，开始提醒通知。</span>
                    </div>
                    <div class="countersign-cell mt-10px">
                      <span class="w-120px inline-block font-color">每间隔</span>
                      <el-input-number v-model="approverForm.noticeConfig.overTimeDuring" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">小时，提醒通知一次。</span>
                    </div>
                    <el-row>超时事务</el-row>
                    <el-row>
                      <el-checkbox v-model="approverForm.noticeConfig.overNotice">提醒通知
                        <el-tooltip content="勾选后才能进行提醒消息发送（站内信系统默认发送，第三方超时消息需在节点通知内配置）" placement="top">
                          <a class="el-icon-question tooltip-question"></a>
                        </el-tooltip>
                      </el-checkbox>
                    </el-row>
                    <el-row>
                      <el-checkbox v-model="approverForm.noticeConfig.overEvent">提醒事件
                        <el-tooltip content="请在节点事件内配置提醒事件" placement="top">
                          <a class="el-icon-question tooltip-question"></a>
                        </el-tooltip>
                      </el-checkbox>
                    </el-row>
                    <div class="countersign-cell mt-10px" v-if="approverForm.noticeConfig.overEvent">
                      <span class="w-120px inline-block font-color">在提醒通知第</span>
                      <el-input-number v-model="approverForm.noticeConfig.overEventTime" :min="1" :step="1" class="w-200px mx-10px" />
                      <span class="font-color">次时，执行提醒事件。</span>
                    </div>
                  </el-form-item>
                </el-form-item>
              </div>
              <el-form-item label="超时设置">
                <div slot="label" class="form-item-label">超时设置</div>
                <el-select class="form-item-content" v-model="approverForm.overTimeConfig.on" placeholder="请选择" filterable :disabled="approverForm.timeLimitConfig.on == 0">
                  <el-option v-for="item in nodeNoticeOptions" :key="item.value" :label="item.label" :value="item.value" />
                </el-select>
              </el-form-item>
              <div class="form-item-content" v-if="approverForm.overTimeConfig.on===1">
                <div class="countersign-cell">
                  <span class="w-120px inline-block font-color">超时</span>
                  <el-input-number v-model="approverForm.overTimeConfig.firstOver" :min="0" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">小时，开始超时通知。</span>
                </div>
                <div class="countersign-cell mt-10px">
                  <span class="w-120px inline-block font-color">每间隔</span>
                  <el-input-number v-model="approverForm.overTimeConfig.overTimeDuring" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">小时，超时通知一次。</span>
                </div>
                <el-row>超时事务</el-row>
                <el-row>
                  <el-checkbox v-model="approverForm.overTimeConfig.overNotice">超时通知
                    <el-tooltip content="勾选后才能进行超时消息发送（站内信系统默认发送，第三方超时消息需在节点通知内配置）" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <el-row>
                  <el-checkbox v-model="approverForm.overTimeConfig.overEvent">超时事件
                    <el-tooltip content="请在节点事件内配置超时事件" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <div class="countersign-cell mt-10px" v-if="approverForm.overTimeConfig.overEvent">
                  <span class="w-120px inline-block font-color">在超时通知第</span>
                  <el-input-number v-model="approverForm.overTimeConfig.overEventTime" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">次时，执行超时事件。</span>
                </div>
                <el-row>
                  <el-checkbox v-model="approverForm.overTimeConfig.overAutoApprove">超时自动审批
                    <el-tooltip content="当前审批节点表单必填字段为空工单流转时不做校验，下一审批节点设置候选人员、选择分支、异常节点时当前审批节点规则失效" placement="top">
                      <a class="el-icon-question tooltip-question"></a>
                    </el-tooltip>
                  </el-checkbox>
                </el-row>
                <div class="countersign-cell mt-10px" v-if="approverForm.overTimeConfig.overAutoApprove">
                  <span class="w-120px inline-block font-color">在超时通知第</span>
                  <el-input-number v-model="approverForm.overTimeConfig.overAutoApproveTime" :min="1" :step="1" class="w-200px mx-10px" />
                  <span class="font-color">次时，执行超时自动审批。</span>
                </div>
              </div>
            </el-form>
          </el-scrollbar>
        </el-tab-pane>

      </el-tabs>
    </section>
    <div class="actions">
      <el-button size="small" @click="cancel">取消</el-button>
      <el-button size="small" type="primary" @click="confirm">确定</el-button>
    </div>
    <el-dialog title="数据传递" :close-on-click-modal="false" :visible.sync="ruleVisible" class="JNPF-dialog JNPF-dialog_center rule-dialog" lock-scroll append-to-body width='700px'>
      <el-tabs class="JNPF-el_tabs node-tabs">
        <el-tab-pane :label="item.title" v-for="(item,i) in assignList" :key="i">
          <div class="option-box-tip">当父流程流转到子流程时，将对应的上一节点表单字段赋值给子流程发起节点</div>
          <el-row :gutter="10" v-for="(child,cIndex) in item.ruleList" :key="cIndex" class="mb-10">
            <el-col :span="2" class="rule-cell">父流程</el-col>
            <el-col :span="7" class="rule-cell">
              <el-select v-model="child.parentField" placeholder="请选择字段" filterable clearable>
                <el-option label="上节点表单Id" value="@prevNodeFormId" />
                <el-option v-for="field in item.formFieldList" :key="field.__vModel__" :label="field.__config__.label" :value="field.__vModel__" />
              </el-select>
            </el-col>
            <el-col :span="4" class="rule-cell mid">赋值给</el-col>
            <el-col :span="2" class="rule-cell">子流程</el-col>
            <el-col :span="7" class="rule-cell">
              <el-select v-model="child.childField" placeholder="请选择字段" filterable clearable>
                <el-option v-for="field in childFieldOptions" :key="field.__vModel__" :label="field.__config__.label" :value="field.__vModel__" />
              </el-select>
            </el-col>
            <el-col :span="2" class="rule-cell">
              <el-button type="danger" icon="el-icon-close" @click="delTransmitRule(i,cIndex)">
              </el-button>
            </el-col>
          </el-row>
          <div class="table-actions" @click="addTransmitRule(i)">
            <el-button type="text" icon="el-icon-plus">新增规则</el-button>
          </div>
        </el-tab-pane>
      </el-tabs>
      <span slot="footer" class="dialog-footer">
        <el-button @click="ruleVisible = false">取消</el-button>
        <el-button type="primary" @click="saveRule">确定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="数据传递" :close-on-click-modal="false" :visible.sync="approverTransmitRuleVisible" class="JNPF-dialog JNPF-dialog_center rule-dialog" lock-scroll append-to-body width='700px'>
      <el-tabs class="JNPF-el_tabs node-tabs">
        <el-tab-pane :label="item.title" v-for="(item,i) in assignList" :key="i">
          <div class="option-box-tip">当节点流转到本节点时，将对应的上一节点的字段赋值给本节点</div>
          <el-row :gutter="10" v-for="(child,cIndex) in item.ruleList" :key="cIndex" class="mb-10">
            <el-col :span="2" class="rule-cell">上节点</el-col>
            <el-col :span="7" class="rule-cell">
              <el-select v-model="child.parentField" placeholder="请选择字段" filterable clearable>
                <el-option label="上节点表单Id" value="@prevNodeFormId" />
                <el-option v-for="field in item.formFieldList" :key="field.__vModel__" :label="field.__config__.label" :value="field.__vModel__" />
              </el-select>
            </el-col>
            <el-col :span="4" class="rule-cell mid">赋值给</el-col>
            <el-col :span="2" class="rule-cell">本节点</el-col>
            <el-col :span="7" class="rule-cell">
              <el-select v-model="child.childField" placeholder="请选择字段" filterable clearable>
                <el-option v-for="item in formFieldsOptions" :key="item.__vModel__" :label="item.__config__.label" :value="item.__vModel__" />
              </el-select>
            </el-col>
            <el-col :span="2" class="rule-cell">
              <el-button type="danger" icon="el-icon-close" @click="delTransmitRule(i,cIndex)">
              </el-button>
            </el-col>
          </el-row>
          <div class="table-actions" @click="addTransmitRule(i)">
            <el-button type="text" icon="el-icon-plus">新增规则</el-button>
          </div>
        </el-tab-pane>
      </el-tabs>
      <span slot="footer" class="dialog-footer">
        <el-button @click="approverTransmitRuleVisible = false">取消</el-button>
        <el-button type="primary" @click="saveApproverTransmitRule">确定</el-button>
      </span>
    </el-dialog>
    <FormulaDialog :visible.sync="formulaVisible" :value="activeItem.field" @updateFormula="updateFormula" :formFieldsOptions="formFieldsOptions" />
    <Detail v-if="viewVisible" ref="View" @close="viewVisible = false" />
    <ApproversSortDialog v-if="registerApproversSortVisible" ref="approversSort" @confirm="updateApproversSortList" />
  </el-drawer>
</template>

<script>
  import { getConfigData } from '@/api/onlineDev/visualDev'
  import { getPrintDevSelector } from '@/api/system/printDev'
  import { getFlowFormInfo } from '@/api/workFlow/FlowEngine'
  import { getFormInfo } from '@/api/workFlow/FormDesign'
  import { NodeUtils } from "../FlowCard/util"
  import AddDataNode from './AddDataNode'
  import nodeConfig from "../FlowCard/config"
  import OrgSelect from '../OrgSelect'
  import MsgDialog from './msgDialog'
  import InterfaceDialog from './InterfaceDialog'
  import FormulaDialog from './formulaDialog'
  import FlowDialog from './FlowDialog'
  import Detail from './TemplateDetail'
  import FlowFormDialog from "./FlowFormDialog"
  import ApproversSortDialog from "./ApproversSortDialog"
  import ConditionalLogic from './ConditionalLogic'
  import ParamsConfig from './ParamsConfig'
  import CustomConditionalLogic from './CustomConditionalLogic';

  const requiredDisabled = (jnpfKey) => {
    return ['billRule', 'createUser', 'createTime', 'modifyTime', 'modifyUser', 'currPosition', 'currOrganize', 'table'].includes(jnpfKey)
  }
  const getDataType = (data) => {
    if (!data.__config__ || !data.__config__.jnpfKey) return ''
    const jnpfKey = data.__config__.jnpfKey
    if (['inputNumber', 'datePicker', 'rate', 'slider'].includes(jnpfKey)) {
      return 'number'
    } else if (['checkbox', 'uploadFile', 'uploadImg', 'cascader', 'organizeSelect', 'areaSelect'].includes(jnpfKey)) {
      return 'array'
    } else if (['select', 'depSelect', 'posSelect', 'userSelect', 'usersSelect', 'treeSelect', 'roleSelect', 'groupSelect'].includes(jnpfKey)) {
      if (data.multiple) return 'array'
    }
    return ''
  }

  const leaders = {
    2: '部门主管',
    15: '直属领导',
    16: '分管领导'
  }

  const messageExForm = {
    errorRule: 1, // 异常处理规则
    errorRuleUser: [], // 指定人员处理异常
    formFieldType: 1,// 表单字段审核方式的类型(1-用户 2-部门)
    initiateType: 6,
    managerLevel: 1,
    departmentLevel: 1,
    formField: '',
    nodeId: '',
    getUserUrl: '',
    initiator: [],
    flowId: '',
    flowName: '',
    assignList: [],
    prevNodeList: [],
    launchMsgConfig: {
      on: 3,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    isAsync: false,
    autoSubmit: false,
  }

  const defaultSubFlowForm = {
    errorRule: 1, // 异常处理规则
    errorRuleUser: [], // 指定人员处理异常
    formFieldType: 1,// 表单字段审核方式的类型(1-用户 2-部门)
    initiateType: 6,
    managerLevel: 1,
    departmentLevel: 1,
    formField: '',
    nodeId: '',
    // 接口服务
    interfaceConfig: {
      interfaceId: '', // 接口id
      interfaceName: '', // 接口名称
      templateJson: [], // 模块json
    },
    getUserUrl: '',
    initiator: [],
    flowId: '',
    flowName: '',
    assignList: [],
    prevNodeList: [],
    launchMsgConfig: {
      on: 3,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    isAsync: false,
    autoSubmit: false,
  }
  const defaultApproverForm = {
    signType: 0,
    signField: '',
    commentType: 0,
    commentContent: '',
    commentField: '',
    autoTransferAssignee: [],  //
    noAssignee: '1',
    orderFlag: false,
    taskFormEnabled: false, //节点实例表单
    extraRule: 1, // 审批人范围,默认无审批人范围
    extraCopyRule: 1, // 抄送审批人范围,默认无审批人范围
    hasAgreeRule: false, // 自动同意规则,默认不启用
    agreeRules: [], // 自动同意规则数组
    formFieldType: 1,// 表单字段审核方式的类型(1-用户 2-部门)
    approvers: [], // 审批人集合
    deptIds: [],
    noLeaderFlag: '1',
    assigneeType: 3, // 指定审批人
    userType: 'role', //role,position,user
    formOperates: [], // 表单权限集合
    circulateRole: [],   // 抄送角色集合
    circulateUser: [],  // 抄送人集合
    isFormFieldCopy: false,
    copyFormFieldType: 1,
    copyFormField: '',
    isCustomCopy: false,
    isInitiatorCopy: false,
    progress: '50',  // 进度
    rejectType: 1, //退回
    rejectStep: '0',  // 退回步骤
    description: '',  // 节点描述
    managerLevel: 1,
    departmentLevel: 1,
    counterSignConfig: {
      auditType: 1,
      auditRatio: 100,
      auditNum: 1,
      rejectType: 0,
      rejectRatio: 10,
      rejectNum: 1,
    },
    formField: '',
    nodeId: '',
    // 接口服务
    interfaceConfig: {
      interfaceId: '', // 接口id
      interfaceName: '', // 接口名称
      templateJson: [], // 模块json
    },
    getUserUrl: '',
    counterSign: 0,
    noApproverHandler: true,
    hasFreeApproverBtn: true,
    hasFreeApproverBtnText: '前 后 加 签',
    hasSaveBtn: true,
    saveBtnText: '暂 存',
    hasAuditBtn: true,
    auditBtnText: '通 过',
    hasRejectBtn: true,
    rejectBtnText: '退 回',
    hasRevokeBtn: true,
    revokeBtnText: '撤 回',
    hasTransferBtn: true,
    transferBtnText: '转 审',
    hasCancelBtn: true,
    cancelBtnText: '不 同 意',

    hasAbstentionBtn: true,
    abstentionBtnText: '弃 权',

    hasLockOrUnLockBtn: true,
    lockOrUnLockBtnText: '锁 定',

    hasAssistBtn: true,
    assistBtnText: '协 办',




    hasInvokeBtn: true,
    invokeBtnText: '委 派',
    hasTerminationBtn: true,
    terminationBtnText: '终 止',
    hasMultiAddBtn: true,
    multiAddBtnText: '普 通 加 签',
    hasMultiRemoveBtn: true,
    multiRemoveBtnText: '减 签',
    hasCopyBtn: true,
    copyBtnText: '抄送',
    hasJumpBtn: true,
    jumpBtnText: '特送',


    hasPrintBtn: false,
    printBtnText: '打 印',
    printId: '', // 打印模板
    hasSign: true,
    hasRevokeFlag: true,
    hasCancelFlag: true,
    hasOpinion: true,
    formId: "",
    formName: "",
    prevNodeList: [],
    assignList: [],
    funcConfigRule: 0,
    approversSortList: [],
    timeLimitConfig: {
      on: 2,  // 开启
      nodeLimit: 0, // 节点限定时长起始值类型
      duringDeal: 24, // 节点处理限定时长(时)
      formField: '',  // 请选择字段
    },
    overTimeConfig: {
      on: 2, // 开启
      firstOver: 0, // 第一次超时时间(时)
      overTimeDuring: 2, // 超时间隔(时)
      overNotice: true, // 超时事务-超时通知
      overAutoApprove: false, // 超时事务-超时自动审批
      overAutoApproveTime: 5, // 自动审批超时次数(次)
      overEvent: false, // 超时事件
      overEventTime: 5, // 超时事件超时次数(次)
    },
    noticeConfig: {
      on: 2, // 开启
      firstOver: 1, // 第一次提醒时间(时)
      overTimeDuring: 2, // 提醒间隔(时)
      overNotice: true, // 提醒事务-提醒通知
      overEvent: false, // 提醒事件
      overEventTime: 5, // 提醒次数(次)
    },
    // 节点事件
    overTimeFuncConfig: {
      asyncEvent: false,
      on: false,     // 开启
      interfaceId: '', // 接口id
      interfaceName: '', // 接口名称
      templateJson: [] // 模块json
    },
    noticeFuncConfig: {
      asyncEvent: false,
      on: false,     // 开启
      interfaceId: '', // 接口id
      interfaceName: '', // 接口名称
      templateJson: [] // 模块json
    },
    overTimeMsgConfig: {
      asyncEvent: false,
      on: 2,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    noticeMsgConfig: {
      asyncEvent: false,
      on: 2,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    waitMsgConfig: {
      asyncEvent: false,
      on: 2,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    rejectMsgConfig: {
      asyncEvent: false,
      on: 2,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    copyMsgConfig: {
      asyncEvent: false,
      on: 2,
      msgId: '',
      msgName: '',
      templateJson: []
    },
    approveFuncConfig: {
      asyncEvent: false,
      on: false,
      interfaceId: '',
      interfaceName: '',
      templateJson: []
    },
    rejectFuncConfig: {
      asyncEvent: false,
      on: false,
      interfaceId: '',
      interfaceName: '',
      templateJson: []
    },
    recallFuncConfig: {
      asyncEvent: false,
      on: false,
      interfaceId: '',
      interfaceName: '',
      templateJson: []
    },
  }
  const defaultStep = [{
    nodeId: '0',
    properties: { title: '流程发起' }

  }, {
    nodeId: '1',
    properties: { title: '上级审批节点' }
  }]
  const typeOptions = [
    {
      label: '发起者本人',
      value: 3
    },
    // {
    //   label: '发起者主管',
    //   value: 1
    // },
    {
      label: '部门主管',
      value: 2
    },
    // {
    //   label: '连续多级主管',
    //   value: 10
    // },
    {
      label: '连续多级部门主管',
      value: 11
    },
    {
      label: '指定成员',
      value: 6
    },
    {
      label: '多部门负责人',
      value: 12
    },
    {
      label: '部门控件对应主管',
      value: 13
    },


    {
      label: '表单变量',
      value: 4
    },
    {
      label: '流程环节',
      value: 5
    },
    {
      label: '接口服务',
      value: 9
    },
    {
      label: '某一节点历史审批人',
      value: 14
    },
    {
      label: '候选人员',
      value: 7
    },
    {
      label: '直属领导',
      value: 15
    },
    {
      label: '分管领导',
      value: 16
    }
  ]
  const noticeOptions = [{
    value: 1,
    label: '自定义'
  }, {
    value: 0,
    label: '关闭'
  }]
  const overTimeOptions = [{
    value: 0,
    label: '接收时间'
  }, {
    value: 1,
    label: '发起时间'
  }, {
    value: 2,
    label: '表单变量'
  },]
  const extraRuleOptions = [
    {
      value: 1,
      label: '无审批人范围'
    },
    {
      value: 6,
      label: '同一公司'
    },
    {
      value: 2,
      label: '同一部门'
    },
    {
      value: 3,
      label: '同一岗位'
    },
    {
      value: 4,
      label: '发起人上级'
    },
    {
      value: 5,
      label: '发起人下属'
    }
  ]
  const nodeNoticeOptions = [
    {
      value: 2,
      label: '同步发起配置'
    },
    ...noticeOptions
  ]
  const noticeOptionsData = [
    {
      value: 3,
      label: '默认'
    },
    ...noticeOptions
  ]
  const nodeNoticeOptionsData = [
    {
      value: 2,
      label: '同步发起配置'
    },
    ...noticeOptionsData
  ]
  const systemFieldOptions = [{
    __config__: {
      label: '流程ID',
      required: true
    },
    __vModel__: '@flowId',
  },
  {
    __config__: {
      label: '任务ID',
      required: true
    },
    __vModel__: '@taskId',
  },
  {
    __config__: {
      label: '节点ID',
      required: true
    },
    __vModel__: '@taskNodeId',
  },
  {
    __config__: {
      label: '流程名称',
      required: true
    },
    __vModel__: '@flowFullName',
  },
  {
    __config__: {
      label: '任务标题',
      required: true
    },
    __vModel__: '@taskFullName',
  },
  {
    __config__: {
      label: '发起用户ID',
      required: true
    },
    __vModel__: '@launchUserId',
  },
  {
    __config__: {
      label: '发起用户名',
      required: true
    },
    __vModel__: '@launchUserName',
  },
  {
    __config__: {
      label: '当前操作用户ID',
      required: true
    },
    __vModel__: '@flowOperatorUserId',
  },
  {
    __config__: {
      label: '业务表主键信息',
      required: true
    },
    __vModel__: '@businessMainKey',
  },
  {
    __config__: {
      label: '当前操作用户名',
      required: true
    },
    __vModel__: '@flowOperatorUserName',
  },
  {
    __config__: {
      label: '是否发起节点',
      required: true
    },
    __vModel__: '@isStartNode',
  },
  {
    __config__: {
      label: '流程表单',
    },
    __vModel__: '@formData',
  },
  {
    __config__: {
      label: '流程变量',
    },
    __vModel__: '@processVariables',
  },
  ]
  const auditTypeOptions = [
    { id: 1, fullName: '按百分比' },
    { id: 2, fullName: '按人数' },
  ];
  const rejectTypeOptions = [{ id: 0, fullName: '无' }, ...auditTypeOptions];
  export default {
    props: [/*当前节点数据*/"value", /*整个节点数据*/"processData", "flowType", 'formInfo'],
    components: { OrgSelect, MsgDialog, InterfaceDialog, FormulaDialog, FlowDialog, Detail, FlowFormDialog, ApproversSortDialog, AddDataNode, ConditionalLogic, ParamsConfig, CustomConditionalLogic },
    data() {
      return {
        temporaryContent: '',
        visible: false,  // 控制面板显隐
        activeName: "config", // or formAuth  Tab面板key
        showingPCons: [], // 用户选择了得条件  被选中的才会被展示在面板上编辑
        pconditions: [], // 从vuex中获取的可以作为流程图条件的集合
        // 当前节点数据
        properties: {
          title: '',
          plusFlag: false,
          modeFlag: 1
        },
        addDataForm: {},
        formFieldList: [],
        flowOptions: [],
        key: '',
        key2: '',
        integrateType: 2,



        // 发起人  start节点和condition节点需要
        initiator: [],
        priorityLength: 0, // 当为条件节点时  显示节点优先级选项的数据
        startForm: JSON.parse(JSON.stringify(nodeConfig.defaultStartForm)),
        ruleVisible: false,
        subFlowForm: JSON.parse(JSON.stringify(defaultSubFlowForm)),
        approverForm: JSON.parse(JSON.stringify(defaultApproverForm)),
        initiateTypeOptions: typeOptions,
        assigneeTypeOptions: typeOptions,
        noticeOptions,
        nodeNoticeOptions,
        noticeOptionsData,
        nodeNoticeOptionsData,
        systemFieldOptions,
        overTimeOptions,
        extraRuleOptions,
        auditTypeOptions,
        rejectTypeOptions,
        realNodeList: [],
        progressOptions: ['10', '20', '30', '40', '50', '60', '70', '80', '90'],
        symbolOptions: [
          {
            label: '大于等于',
            value: ">="
          },
          {
            label: '大于',
            value: ">"
          },
          {
            label: '等于',
            value: "=="
          },
          {
            label: '小于等于',
            value: "<="
          },
          {
            label: '小于',
            value: "<"
          },
          {
            label: '不等于',
            value: "<>"
          },
          {
            label: '包含',
            value: "like"
          },
          {
            label: '不包含',
            value: "notLike"
          }],
        logicOptions: [
          {
            label: 'and',
            value: "and"
          },
          {
            label: 'or',
            value: "or"
          }],
        conditionTypeOptions: [{
          label: '字段',
          value: 1
        },
        {
          label: '公式',
          value: 3
        }],
        conditionTypeOptions1: [{
          label: '字段',
          value: 1
        },
        {
          label: '自定义',
          value: 2
        }],
        assignList: [],
        printTplList: [],
        childFieldOptions: [],
        childFuncRequiredOptions: [],
        nodeOptions: [],
        formulaVisible: false,
        activeItem: {},
        viewVisible: false,
        formFieldList: [],
        approverTransmitRuleVisible: false,
        prevNodeList: [],
        isPrevNodeWithSubForm: false,
        formOperatesList: [],
        indeterminateReadFlag: false,
        readAllChecked: false,
        indeterminateWriteFlag: false,
        writeAllChecked: false,
        requiredAllChecked: false,
        indeterminateRequiredFlag: false,
        oldFormId: '',
        registerApproversSortVisible: false,
        beforeNodeOptions: [],
      };
    },

    computed: {
      // 未使用的条件个数
      notUseConNum() {
        // 发起人是默认就有得  所以需要加 1
        return this.pconditions.length - this.showingPCons.length + 1;
      },
      formFieldsOptions() {
        return this.formFieldList.filter(o => o.__config__.jnpfKey !== 'table')
      },

      formExOptions() {
        let formFieldsList = []
        formFieldsList = this.integrateType != 2 ? this.processData.properties.formFieldList || [] : this.processData.childNode.properties.formFieldList || []
        let boo = formFieldsList.some(o => o.id === '@formId')
        if (!boo) formFieldsList.unshift({ fullName: '@表单ID', id: '@formId', label: '@formId(@表单ID)' })
        return formFieldsList;
      },

      usedFormItems() {
        return this.formFieldsOptions.filter(o => o.__vModel__.indexOf('-') < 0)
      },
      funcOptions() {
        let options = [
          ...systemFieldOptions,
          ...this.formFieldsOptions
        ]
        return options
      },
      funcRequiredOptions() {
        return this.formFieldsOptions.filter(o => o.__config__ && o.__config__.required)
      },
      rejectStepOptions() {
        let options = []
        const list = [{
          nodeId: '2',
          properties: { title: '自选审批节点' }
        }]
        options = [...defaultStep, ...list, ...this.realNodeList]
        if (this.approverForm.rejectType == 2 || this.approverForm.rejectType == 3) {
          options = options.filter(o => o.nodeId != 1)
        }
        return options
      },
      paramsConfig() {
        return this.processData.properties.paramsConfig || []
      },
      getCanSetApproversSort() {
        return (
          this.approverForm.assigneeType === 6 &&
          this.approverForm.approvers.length &&
          this.approverForm.approvers.every(o => o.indexOf('--user') !== -1) &&
          this.approverForm.counterSign == 2
        );
      }
    },

    watch: {
      visible(val) {
        if (!val) {
          this.approverForm = JSON.parse(JSON.stringify(defaultApproverForm)) // 重置数据为默认状态
          this.subFlowForm = JSON.parse(JSON.stringify(defaultSubFlowForm))
          this.addDataForm = JSON.parse(JSON.stringify(nodeConfig.defaultStartForm)) // 重置数据为默认状态
          this.startForm = JSON.parse(JSON.stringify(nodeConfig.defaultStartForm))
          return
        }
        this.isStartNode() && this.initStartNodeData()
        this.isMailNode() && this.initMailNode()
        this.isMessageNode() && this.initMessageNode()
        this.isServiceTaskNode() && this.initServiceTaskNode()
        this.isJumpTaskNode() && this.initJumpTaskNode()
        this.isJumpExTaskNode() && this.initJumpExTaskNode()
        this.isAddDataNode() && this.initCommonNodeData('addData')
        this.isDingNode() && this.initDingNode()
        this.isDxNode() && this.initDxNode()
        this.isWxNode() && this.initWxNode()
        this.isCopyNode() && this.initCopyNode()
        this.isZhanNode() && this.initZhanNode()
        this.isHttpTaskNode() && this.initHttpTaskNode()
        this.isSbNode() && this.initSbNode()
        this.isSQLTaskNode() && this.initSQLTaskNode()
        this.isScriptTaskNode() && this.initScriptTaskNode()
        this.isShellTaskNode() && this.initShellTaskNode()
        this.isSubFlowNode() && this.initSubFlowData()
        this.isApproverNode() && this.initApproverNodeData()
        this.isConditionNode() && this.initConditionNodeData()
        this.isTimerNode() && this.initTimerNodeData()
        this.getPrintTplList()
      },
      'startForm.titleContent'(newVal) {
        this.temporaryContent = newVal;
      },
      'approverForm.commentContent'(newVal) {
        this.temporaryContent = newVal;
      },
      value(newVal) {
        if (newVal && newVal.properties) {
          this.visible = true;
          this.properties = JSON.parse(JSON.stringify(newVal.properties));
          if (this.properties) {
            NodeUtils.isConditionNode(newVal) && this.getPriorityLength();
          }
        }
      }
    },

    methods: {
      parameterSource(required) {
        let list = [
          { value: 1, label: '字段' },
          { value: 2, label: '自定义' },
          { value: 4, label: '系统变量' },
          { value: 3, label: '为空' }]
        return required ? list.filter(o => o.value != 3) : list
      },

      leaderTipTitle(type) {
        const leaderName = leaders[type];
        return `发起者的${leaderName}将作为审批人处理审批单,先找到发起人所在的部门,然后在【组织管理】-【组织管理】-【编辑或新增】-【${leaderName}配置项】`
      },

      startUserLabel(type, itemIndex) {
        const leaderName = leaders[type];
        return `第${itemIndex}级${leaderName}`
      },

      initCommonNodeData(key) {
        let properties = JSON.parse(JSON.stringify(this.value.properties))
        Object.assign(this[key + 'Form'], properties);
        this.$nextTick(async () => {
          if ((key === 'addData' || key === 'updateData' || key == 'launchFlow') && this[key + 'Form'].enableFlow && this[key + 'Form'].formId) {
            this.getFlowOptions(this[key + 'Form'].formId);
          }
          if (this.integrateType == 2 && ['addData', 'updateData', 'deleteData'].includes(key) && !this[key + 'Form'].ruleList.length) {
            const emptyChildItem = { field: '', symbol: '==', fieldValueType: 1, fieldValue: undefined, jnpfKey: '', fieldValueJnpfKey: '', cellKey: +new Date() };
            const emptyItem = { logic: 'and', groups: [emptyChildItem] };
            this[key + 'Form'].ruleList.push(JSON.parse(JSON.stringify(emptyItem)));
            this.key = +new Date()
          }
          if (this.integrateType == 3 && key === 'start' && !this[key + 'Form'].webhookUrl) {
            const res = await getWebhookUrl(this.formInfo.id);
            if (!res) return;
            this[key + 'Form'].webhookUrl = res.data.webhookUrl;
            this[key + 'Form'].webhookGetFieldsUrl = res.data.requestUrl;
            this[key + 'Form'].webhookRandomStr = res.data.randomStr;
          }
        });
      },
      // 字段设置验证
      transferExist(form) {
        const list = this[form + 'Form'].transferList;
        let isOk = true;
        for (let i = 0; i < list.length; i++) {
          const e = list[i];
          if (e.required) {
            if (!e.sourceValue) {
              this.$message.warning(`${e.targetFieldLabel}的值不能为空`);
              isOk = false;
              break;
            }
          } else {
            if (!e.targetField) {
              this.$message.warning(`目标表单字段不能为空`);
              isOk = false;
              break;
            }
          }
        }
        return isOk;
      },
      conditionExist(form) {
        const list = this[form + 'Form'].ruleList;
        let isOk = true;
        outer: for (let i = 0; i < list.length; i++) {
          const e = list[i];
          let label = '';
          if (this.integrateType == 1) {
            if (form === 'updateData') label = '更新条件';
            if (form === 'deleteData') label = '删除条件';
          }
          if (this.integrateType == 2) {
            label = '目标表单';
          }
          for (let j = 0; j < e.groups.length; j++) {
            const child = e.groups[j];
            if (!child.field) {
              this.$message.warning(`条件字段不能为空`);
              isOk = false;
              break outer;
            }
            if (!child.symbol) {
              this.$message.warning('条件符号不能为空');
              isOk = false;
              break;
            }
            if (
              !['null', 'notNull'].includes(child.symbol) && !['switch'].includes(child.jnpfKey) &&
              (!child.fieldValue || this.jnpf.isEmpty(child.fieldValue)) &&
              (!['inputNumber', 'calculate', 'rate'].includes(child.jnpfKey) || (['inputNumber', 'calculate', 'rate'].includes(child.jnpfKey) && child.fieldValue !== 0))
            ) {
              this.$message.warning('数据值不能为空');
              isOk = false;
              break;
            }
          }
        }
        return isOk;
      },
      getFormFieldList1(id, form) {
        console.log('==============================');
        this.flowOptions = []
        getConfigData(id).then(res => {
          const { formData, enableFlow, flowId } = res.data;
          let formJson = {},
            fieldList = [];
          if (formData) formJson = JSON.parse(formData);
          fieldList = formJson.fields || [];
          let list = this.transformFieldList(fieldList);
          this[form + 'Form'].formFieldList = list.map(o => ({ ...o, label: o.fullName ? o.id + '(' + o.fullName + ')' : o.id }));
          if (enableFlow == 1) this.getFlowOptions(flowId);
          if (form === 'addData' || form === 'launchFlow') this.updateTransferList(form);
          this.key = +new Date()
        });
      },
      // 获取流程表单字段
      getFlowFormFieldList(id, form) {
        this.flowOptions = [];
        getFlowFormInfo(id).then(res => {
          let { formType = 1, propertyJson } = res.data;
          let formJson = {},
            fieldList = [];
          if (propertyJson) formJson = JSON.parse(propertyJson);
          if (formType == 1) {
            fieldList = this.transformFormJson(formJson);
          } else {
            fieldList = formJson.fields;
          }
          let list = this.transformFieldList(fieldList);
          this[form + 'Form'].formFieldList = list.map(o => ({ ...o, label: o.fullName ? o.id + '(' + o.fullName + ')' : o.id }));
          if (form === 'launchFlow') this.updateTransferList(form);
        });
      },
      // 获取流程列表
      getFlowOptions(id) {
        getFlowList(id, '1').then(res => {
          this.flowOptions = res.data
        })
      },
      transformFormJson(list) {
        const fieldList = list.map(o => ({
          __config__: {
            label: o.filedName,
            jnpfKey: o.jnpfKey || '',
            required: o.required || false,
          },
          __vModel__: o.filedId,
          multiple: o.multiple || false,
        }));
        return fieldList;
      },
      transformFieldList(formFieldList) {
        let list = [];
        const loop = (data, parent) => {
          if (!data) return;
          if (data.__vModel__ && data.__config__.jnpfKey !== 'table') {
            const isTableChild = parent && parent.__config__ && parent.__config__.jnpfKey === 'table';
            list.push({
              id: isTableChild ? parent.__vModel__ + '-' + data.__vModel__ : data.__vModel__,
              fullName: isTableChild ? parent.__config__.label + '-' + data.__config__.label : data.__config__.label,
              ...data,
            });
          }
          if (Array.isArray(data)) data.forEach(d => loop(d, parent));
          if (data.__config__ && data.__config__.children && Array.isArray(data.__config__.children)) {
            loop(data.__config__.children, data);
          }
        };
        loop(formFieldList);
        return list;
      },
      updateTransferList(form) {
        const formFieldList = this[form + 'Form'].formFieldList;
        let list = [];
        for (let i = 0; i < formFieldList.length; i++) {
          if (formFieldList[i].__config__.required) {
            list.push({ targetField: formFieldList[i].id, targetFieldLabel: formFieldList[i].fullName, sourceType: 1, sourceValue: '', required: true });
          }
        }
        this[form + 'Form'].transferList = list;
        this.key = +new Date()
      },
      onSwerveNodeChange(id) {
        if (!id) return
        let item = this.beforeNodeOptions.filter(o => o.id == id)[0]
        this.properties.swerveLabel = item.fullName
      },
      onSignNumberChange(val, key) {
        if (val) return;
        this.$nextTick(() => { this.$set(this.approverForm.counterSignConfig, key, 1) })
      },
      updateApproversSortList(data) {
        this.approverForm.approversSortList = data
      },
      openApproversSortListModal() {
        this.registerApproversSortVisible = true
        this.approversSort
        this.$nextTick(() => {
          this.$refs.approversSort.init({ ids: this.approverForm.approversSortList })
        })
      },
      onApproversChange(val) {
        console.log(val)
        if (this.approverForm.assigneeType != 6 || !val || !val.length || !val.every(o => o.indexOf('--user') !== -1)) return (this.approverForm.approversSortList = []);
        if (!this.approverForm.approversSortList.length) return (this.approverForm.approversSortList = val);
        const arr = this.approverForm.approversSortList.filter(o => val.indexOf(o) !== -1);
        const updated = val.filter(o => this.approverForm.approversSortList.indexOf(o) === -1);
        this.approverForm.approversSortList = [...arr, ...updated];
      },
      handleCheckedCitiesChange(val, index) {
        let totalCount = this.formOperatesList.length
        let requiredDisabledCount = this.formOperatesList.filter(o => !o.requiredDisabled).length
        let readCount = 0
        let writeCount = 0
        let requiredCount = 0
        this.formOperatesList.forEach(item => {
          if (item.read && index == 1) {
            readCount++
          }
          if (item.write && index == 2) {
            writeCount++
          }
          if (item.required && index == 3) {
            requiredCount++
          }
        })
        if (index == 1) this.readAllChecked = readCount === totalCount
        if (index == 2) this.writeAllChecked = writeCount === totalCount
        if (index == 3) this.requiredAllChecked = requiredCount === requiredDisabledCount
        if (index == 1) this.indeterminateReadFlag = readCount > 0 && readCount < totalCount
        if (index == 2) this.indeterminateWriteFlag = writeCount > 0 && writeCount < totalCount
        if (index == 3) this.indeterminateRequiredFlag = requiredCount > 0 && requiredCount < requiredDisabledCount
      },
      updateReadAllSelected(val, index) {
        if (index == 1) this.indeterminateReadFlag = false
        if (index == 2) this.indeterminateWriteFlag = false
        if (index == 3) this.indeterminateRequiredFlag = false
        this.formOperatesList.forEach(item => {
          if (index == 1) item.read = val;
          if (index == 2) item.write = val;
          if (index == 3 && !item.requiredDisabled) item.required = val;
        })
      },
      onChangeRelationField(index, form, type) {
        let item = this[form][type].templateJson[index]
        if (item.relationField) item.relationField = undefined
        item.relationField = item.sourceType == 4 ? this.systemFieldOptions[0].__vModel__ : ''
        this.$set(this[form][type].templateJson, index, item);
      },
      refreshPrintOptions() {
        getPrintDevSelector(1).then(res => {
          let data = res.data.list
          let list = data.filter(o => o.children && o.children.length)
          this.printTplList = list.map(o => ({
            ...o,
            hasChildren: true
          }))
        }).catch(error => {
          reject(error)
        })
      },
      open(url) {
        window.open(url, "_blank");
      },
      openPrint() {
        let routeUrl = this.$router.resolve({
          path: '/system/printDev?open=true'
        });
        this.open(routeUrl.href)
      },
      handleSelect(item) {
        this.temporaryContent += "{" + item.id + "}"
        this.startForm.titleContent = this.temporaryContent
      },
      handleCommentSelect(item) {
        this.temporaryContent += "{" + item.id + "}"
        this.approverForm.commentContent = this.temporaryContent
      },
      querySearch(queryString, cb) {
        let systemParams = [{
          id: '@flowFullName',
          value: '@flowFullName(流程名称)'
        },
        {
          id: '@flowFullCode',
          value: '@flowFullCode(流程编码)'
        },
        {
          id: '@launchUserName',
          value: '@launchUserName(发起用户名)'
        },
        {
          id: '@launchTime',
          value: '@launchTime(发起时间)'
        },
        {
          id: '@currentNodeComment',
          value: '@currentNodeComment(当前环节审批意见)'
        },
        {
          id: '@currentNodeName',
          value: '@currentNodeName(当前节点名称)'
        },
        {
          id: '@currentNodeUserName',
          value: '@currentNodeUserName(当前审批人名称)'
        },
        {
          id: '@auditTime',
          value: '@auditTime(审批时间)'
        },
        ]
        let items = []
        items = this.usedFormItems.filter(o => o.__config__.jnpfKey === 'input' || o.__config__.jnpfKey === 'textarea' || o.__config__.jnpfKey === 'inputNumber')
        const params = items.map(o => ({ id: o.__vModel__, value: o.__vModel__ + "(" + o.__config__.label + ")" }))

        cb([...systemParams, ...params]);
      },
      getFormOperates() {
        let res = []
        this.isApproverNode() && (res = this.approverForm.formOperates)
        this.isStartNode() && (res = this.startForm.formOperates)
        this.formOperatesList = res
        let requiredDisabledCount = this.formOperatesList.filter(o => !o.requiredDisabled).length
        let readCount = 0
        let writeCount = 0
        let requiredCount = 0
        if (!this.formOperatesList.length) return res
        this.formOperatesList.forEach(item => {
          if (item.read) {
            readCount++
          }
          if (item.write) {
            writeCount++
          }
          if (item.required) {
            requiredCount++
          }
        })
        this.readAllChecked = readCount === this.formOperatesList.length
        this.writeAllChecked = writeCount === this.formOperatesList.length
        this.requiredAllChecked = requiredCount === requiredDisabledCount
        this.indeterminateReadFlag = readCount > 0 && readCount < this.formOperatesList.length
        this.indeterminateWriteFlag = writeCount > 0 && writeCount < this.formOperatesList.length
        this.indeterminateRequiredFlag = requiredCount > 0 && requiredCount < requiredDisabledCount
        return res
      },
      resetOrgColl() {
        this.approverForm.approvers = []
        this.approverForm.autoTransferAssignee = []
        this.subFlowForm.initiator = []
        this.approverForm.approversSortList = [];
      },
      onOrgChange(data, key) {

      },
      timeRangeLabel(item) {
        const index = ['fc-time-duration', 'fc-date-duration'].findIndex(t => t === item.tag)
        if (index > -1) {
          return '时长' + ['(小时)', '(天)'][index]
        } else {
          return item.label
        }
      },
      getAssignTypeLabel() {
        const res = this.assigneeTypeOptions.find(t => t.value === this.approverForm.assigneeType)
        return res ? res.label : ''
      },
      changeAllFormOperate(val) {
        const target = this.isStartNode() ? this.startForm : this.approverForm
        target.formOperates.forEach(t => t.formOperate = val)
      },
      // 是否可以显示当前条件组件
      couldShowIt(item, ...tag) {
        return tag.includes(item.tag) && this.showingPCons.includes(item.formId);
      },
      initFormOperates(target, isUpdate, isSameForm) {
        const formOperates = target.properties && target.properties.formOperates || []
        let res = []
        const getWriteById = id => {
          const arr = formOperates.filter(o => o.id === id)
          return arr.length ? arr[0].write : NodeUtils.isStartNode(target)
        }
        const getReadById = id => {
          const arr = formOperates.filter(o => o.id === id)
          return arr.length ? arr[0].read : true
        }
        const getRequiredById = id => {
          const arr = formOperates.filter(o => o.id === id)
          return arr.length ? arr[0].required : false
        }
        if (!formOperates.length || isUpdate) {
          for (let i = 0; i < this.formFieldList.length; i++) {
            const data = this.formFieldList[i];
            res.push({
              id: data.__vModel__,
              name: data.__config__.label,
              required: !isSameForm ? data.__config__.required : data.__config__.required || getRequiredById(data.__vModel__),
              requiredDisabled: requiredDisabled(data.__config__.jnpfKey) || data.__config__.required,
              jnpfKey: data.__config__.jnpfKey,
              dataType: getDataType(data),
              read: !isSameForm ? true : getReadById(data.__vModel__),
              write: !isSameForm ? NodeUtils.isStartNode(target) : getWriteById(data.__vModel__),
            })
          }
        } else {
          res = formOperates
        }
        return res
      },
      initCopyNode() {
        this.properties = this.value.properties
      },
      initMessageNode() {
        this.properties = this.value.properties
      },
      initMailNode() {
        this.properties = this.value.properties
      },
      initServiceTaskNode() {
        this.properties = this.value.properties
      },
      initJumpTaskNode() {
        this.getSwerveNodeOption()
        this.getConditionNodeFieldList()
        // 初始化条件表单数据
        let nodeConditions = this.value.properties && this.value.properties.conditions
        for (let i = 0; i < nodeConditions.length; i++) {
          for (let j = 0; j < this.usedFormItems.length; j++) {
            if (nodeConditions[i].__vModel__ === this.usedFormItems[j].__vModel__) {
              nodeConditions[i] = { ...nodeConditions[i], ...this.usedFormItems[j] }
            }
          }
        }
        this.pconditions = JSON.parse(JSON.stringify(nodeConditions))
        this.properties = this.value.properties
      },
      initJumpExTaskNode() {
        this.getSwerveNodeOption()
        this.properties = this.value.properties
      },
      initDingNode() {
        this.properties = this.value.properties
      },
      initDxNode() {
        this.properties = this.value.properties
      },
      initWxNode() {
        this.properties = this.value.properties
      },
      initZhanNode() {
        this.properties = this.value.properties
      },
      initHttpTaskNode() {
        this.properties = this.value.properties
      },
      initSbNode() {
        this.properties = this.value.properties
      },
      initSQLTaskNode() {
        this.properties = this.value.properties
      },
      initScriptTaskNode() {
        this.properties = this.value.properties
      },
      initShellTaskNode() {
        this.properties = this.value.properties
      },
      initStartNodeData() {
        this.initInitiator()
      },
      copyNodeConfirm() {
        this.$emit("confirm", this.properties, this.getOrgSelectLabel('copy') || '抄送人');
        this.visible = false;
      },
      /**
       * 条件节点确认保存得回调
       */
      conditionNodeConfirm() {
        if (!this.exist()) return
        if (this.properties.conditionType == 1 && !this.properties.swerveNode) return this.$message.error('请设置转向节点');
        this.properties.conditions = this.pconditions
        let content = '';
        for (let i = 0; i < this.properties.conditions.length; i++) {
          const e = this.properties.conditions[i];
          content += this.properties.conditions.length == 1 ? '' : (i == 0 ? '' : ` ${this.properties.matchLogic} `) + '( ';
          for (let j = 0; j < e.groups.length; j++) {
            const groups = e.groups[j];
            const logic = j == 0 ? '' : ` ${e.logic} `;
            const text = `[ ${groups.fieldName} ${groups.symbolName}
        ${groups.fieldLabel ? groups.fieldLabel : groups.fieldValue || groups.fieldValue === 0 ? groups.fieldValue : ''} ]`;
            content += logic + text;
          }
          content += this.properties.conditions.length == 1 ? '' : ' )';
        }
        if (this.properties.conditionType == 1) content += ' 转向' + this.properties.swerveLabel;
        if (this.properties.modeFlag == 2) content += '开发者模式';
        this.$emit("confirm", this.properties, content || '请设置条件');
        this.visible = false;
      },
      getOrgSelectLabel(type) {
        return this.$refs[type + '-org'] && this.$refs[type + '-org']['selectedLabels']
      },
      /**
       * 开始节点确认保存
       */
      startNodeConfirm() {
        console.log('修改起始节点')
        if (this.startForm.errorRule == 2 && !this.startForm.errorRuleUser.length) {
          this.$message({
            message: '请选择异常处理人',
            type: 'error',
          })
          return
        }
        if (this.startForm.hasPrintBtn && !this.startForm.printId) {
          this.$message.warning('请选择打印模板')
          return this.value
        }
        if (this.startForm.paramsConfig.length) {
          let params = this.startForm.paramsConfig
          const isField = params.every(item => item.field)
          if (!isField) {
            this.$message.warning('请设置参数名')
            return
          }
          const isFieldValue = params.every(item => item.fieldValue)
          if (!isFieldValue) {
            this.$message.warning('请设置参数值')
            return
          }
          // 判断是否重复
          let isRepeat = params.some((item, index) => {
            return params.findIndex((t, i) => t.field === item.field && i !== index) !== -1
          })
          if (isRepeat) {
            this.$message.warning('参数名重复')
            return
          }

        }
        let titleObj = {
          title: this.properties.title
        }
        Object.assign(this.properties, this.startForm, titleObj)
        this.properties.initiator = this.initiator
        let content = '',
          initiatorText = this.getOrgSelectLabel('start-user')
        if (!initiatorText) {
          content = "所有人"
        } else {
          content += (content && initiatorText ? ',' : '') + initiatorText
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 定时器节点确认保存
       */
      timerNodeConfirm() {
        let content = '将定时执行'

        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      messageNodeComfirm() {
        let content = '发送消息通知'
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
        * 邮件节点节点确认保存
        */
      mailNodeComfirm() {
        let content = ''
        let { to, subject, cc, bcc, html } = this.properties
        if (!to && !subject && !cc && !bcc && !html) {
          content = '请设置邮件相关信息'
        } else {
          content = `此节点设置邮件信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 邮件节点节点确认保存
       */
      serviceTaskNodeComfirm() {
        let content = ''
        let { serviceClassName } = this.properties
        if (!serviceClassName) {
          content = '请设置业务节点信息'
        } else {
          content = `此节点用来设置业务节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;

      },
      jumpTaskNodeComfirm() {
        let content = '此节点用来设置跳转节点信息'
        this.properties.conditions = this.pconditions
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      jumpExTaskNodeComfirm() {
        let content = '连线信息已设置'
        this.properties.conditions = this.pconditions
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 邮件节点节点确认保存
       */
      dingNodeComfirm() {
        let content = ''
        let { to } = this.properties
        if (!to) {
          content = '请设置业务节点信息'
        } else {
          content = `此节点用来设置业务节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 邮件节点节点确认保存
       */
      dxNodeComfirm() {
        let content = ''
        let { to } = this.properties
        if (!to) {
          content = '请设置短信节点信息'
        } else {
          content = `此节点用来设置短信节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },

      /**
       * 邮件节点节点确认保存
       */
      wxNodeComfirm() {
        let content = ''
        let { to } = this.properties
        if (!to) {
          content = '请设置微信节点信息'
        } else {
          content = `此节点用来设置微信节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 邮件节点节点确认保存
       */
      zhanNodeComfirm() {
        let content = ''
        let { to } = this.properties
        if (!to) {
          content = '请设置站内信节点信息'
        } else {
          content = `此节点用来设置站内信发送信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },

      /**
       * 邮件节点节点确认保存
       */
      scriptTaskNodeComfirm() {
        let content = ''
        let { scriptFormat, scriptContent } = this.properties
        if (!scriptFormat && !scriptContent) {
          content = '请设置脚本节点信息'
        } else {
          content = `此节点用来设置脚本节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 邮件节点节点确认保存
       */
      shellTaskNodeComfirm() {
        let content = ''
        let { command, shellDirectory } = this.properties
        if (!shellDirectory && !shellDirectory) {
          content = '请设置运维节点信息'
        } else {
          content = `此节点用来设置运维节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },

      /**
       * 请求节点节点确认保存
       */
      httpTaskNodeComfirm() {
        let content = ''
        let { requestURL, requestBody } = this.properties
        if (!requestBody && !requestURL) {
          content = '请设置请求节点信息'
        } else {
          content = `此节点用来设置请求节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      sbNodeComfirm() {
        let content = '线下任务'
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      sqlTaskNodeComfirm() {
        let content = ''
        let { requestURL, requestBody } = this.properties
        if (!requestBody && !requestURL) {
          content = '请选择SQL编排节点信息'
        } else {
          content = `此节点用来选择SQL编排节点信息`
        }
        this.$emit("confirm", this.properties, content);
        this.visible = false;
      },
      /**
       * 子流程节点确认保存
       */
      subFlowNodeConfirm() {
        if (!this.properties.title) {
          this.$message({
            message: '请输入子流程名称',
            type: 'error',
          })
          return
        }
        let content = ''
        if (this.subFlowForm.initiateType === 6) {
          if (!this.subFlowForm.initiator.length) {
            this.$message({
              message: '请设置发起人',
              type: 'error',
            })
            return
          }
          let initiatorText = this.getOrgSelectLabel('subFlow-user')
          content += (content && initiatorText ? ',' : '') + initiatorText
        } else {
          content = this.initiateTypeOptions.find(t => t.value === this.subFlowForm.initiateType).label
        }
        if (this.subFlowForm.initiateType == 4 && !this.subFlowForm.formField) {
          this.$message({
            message: '请选择表单字段',
            type: 'error',
          })
          return
        }
        if (this.subFlowForm.initiateType == 5 && !this.subFlowForm.nodeId) {
          this.$message({
            message: '请选择节点',
            type: 'error',
          })
          return
        }
        if (this.subFlowForm.initiateType == 9 && !this.subFlowForm.interfaceConfig.interfaceId) {
          this.$message({
            message: '请选择接口模板',
            type: 'error',
          })
          return
        }
        if (!this.subFlowForm.flowId) {
          this.$message({
            message: '请选择子流程表单',
            type: 'error',
          })
          return
        }
        if (this.subFlowForm.errorRule == 2 && !this.subFlowForm.errorRuleUser.length) {
          this.$message({
            message: '请选择异常处理人',
            type: 'error',
          })
          return
        }
        let titleObj = {
          title: this.properties.title
        }
        Object.assign(this.properties, this.subFlowForm, titleObj)
        this.$emit("confirm", this.properties, content || '请设置发起人');
        this.visible = false;
      },
      /**
       * 审批节点确认保存
       */
      approverNodeConfirm() {
        if (!this.properties.title) {
          this.$message({
            message: '请输入节点名称',
            type: 'error',
          })
          return
        }
        if (this.approverForm.hasPrintBtn && !this.approverForm.printId) {
          this.$message.warning('请选择打印模板')
          return this.value
        }
        const assigneeType = this.approverForm.assigneeType
        let content = ''
        if (assigneeType == 6) {
          if (!this.approverForm.approvers.length) {
            this.$message({
              message: '请设置审批人',
              type: 'error',
            })
            return
          }
          // approver
          let approverText = this.getOrgSelectLabel('approver-user');
          content += (content && approverText ? ',' : '') + approverText
        } else {
          content = this.assigneeTypeOptions.find(t => t.value === assigneeType).label
        }
        if (assigneeType == 4 && !this.approverForm.formField) {
          this.$message({
            message: '请选择表单字段',
            type: 'error',
          })
          return
        }
        if (assigneeType == 5 && !this.approverForm.nodeId) {
          this.$message({
            message: '请选择节点',
            type: 'error',
          })
          return
        }
        if (assigneeType == 9 && !this.approverForm.interfaceConfig.interfaceId) {
          this.$message({
            message: '请选择接口模板',
            type: 'error',
          })
          return
        }
        if (this.approverForm.hasAgreeRule && !this.approverForm.agreeRules.length) {
          this.$message({
            message: '请选择同意规则配置',
            type: 'error',
          })
          return
        }
        let titleObj = {
          title: this.properties.title
        }
        Object.assign(this.properties, this.approverForm, titleObj)
        this.$emit("confirm", this.properties, content || '请设置审批人')
        this.visible = false

      },
      // 确认修改
      confirm() {
        this.isCopyNode() && this.copyNodeConfirm()
        this.isMailNode() && this.mailNodeComfirm()
        this.isMessageNode() && this.messageNodeComfirm()
        this.isServiceTaskNode() && this.serviceTaskNodeComfirm()
        this.isJumpTaskNode() && this.jumpTaskNodeComfirm()
        this.isJumpExTaskNode() && this.jumpExTaskNodeComfirm()
        this.isDingNode() && this.dingNodeComfirm()
        this.isDxNode() && this.dxNodeComfirm()
        this.isWxNode() && this.wxNodeComfirm()
        this.isWxNode() && this.wxNodeComfirm()
        this.isZhanNode() && this.zhanNodeComfirm()
        this.isHttpTaskNode() && this.httpTaskNodeComfirm()
        this.isSbNode() && this.sbNodeComfirm()
        this.isSQLTaskNode() && this.sqlTaskNodeComfirm()
        this.isScriptTaskNode() && this.scriptTaskNodeComfirm()
        this.isShellTaskNode() && this.shellTaskNodeComfirm()
        this.isStartNode() && this.startNodeConfirm()
        this.isTimerNode() && this.timerNodeConfirm()
        this.isSubFlowNode() && this.subFlowNodeConfirm()
        this.isApproverNode() && this.approverNodeConfirm()
        this.isConditionNode() && this.conditionNodeConfirm()
      },
      // 关闭抽屉
      cancel() {
        setTimeout(() => {
          this.$emit("cancel");
          this.visible = false;
        }, 0)
      },
      /**
       * 删除流程条件
       */
      onDelCondition(index) {
        this.pconditions.splice(index, 1)
      },
      // 配合getPriorityLength 获取前一个节点条件数组长度 用于设置优先级
      getPrevData() {
        return NodeUtils.getPreviousNode(this.value.prevId, this.processData);
      },
      // 用于获取节点优先级范围
      getPriorityLength() {
        this.priorityLength = this.getPrevData().conditionNodes.length;
      },
      // 判断是否是条件节点
      isConditionNode() {
        return this.value ? NodeUtils.isConditionNode(this.value) : false;
      },
      /** 判断是否是审批节点*/
      isApproverNode() {
        return this.value ? NodeUtils.isApproverNode(this.value) : false;
      },

      isStartNode() {
        return this.value ? NodeUtils.isStartNode(this.value) : false;
      },
      // 判断是否是新增数据节点
      isAddDataNode() {
        return this.value ? NodeUtils.isAddDataNode(this.value) : false;
      },
      isCopyNode() {
        return this.value ? NodeUtils.isCopyNode(this.value) : false
      },
      // 判断是否是消息通知节点
      isMessageNode() {
        return this.value ? NodeUtils.isMessageNode(this.value) : false;
      },
      isMailNode() {
        return this.value ? NodeUtils.isMailNode(this.value) : false
      },
      isServiceTaskNode() {
        return this.value ? NodeUtils.isServiceTaskNode(this.value) : false
      },
      isJumpTaskNode() {
        return this.value ? NodeUtils.isJumpTaskNode(this.value) : false
      },
      isJumpExTaskNode() {
        return this.value ? NodeUtils.isJumpExTaskNode(this.value) : false
      },

      isDingNode() {
        return this.value ? NodeUtils.isDingNode(this.value) : false
      },
      isDxNode() {
        return this.value ? NodeUtils.isDxNode(this.value) : false
      },
      isWxNode() {
        return this.value ? NodeUtils.isWxNode(this.value) : false
      },

      isZhanNode() {
        return this.value ? NodeUtils.isZhanNode(this.value) : false
      },
      isHttpTaskNode() {
        return this.value ? NodeUtils.isHttpTaskNode(this.value) : false
      },
      isSbNode() {
        return this.value ? NodeUtils.isSbNode(this.value) : false
      },
      isSQLTaskNode() {
        return this.value ? NodeUtils.isSQLTaskNode(this.value) : false
      },
      isScriptTaskNode() {
        return this.value ? NodeUtils.isScriptTaskNode(this.value) : false
      },
      isShellTaskNode() {
        return this.value ? NodeUtils.isShellTaskNode(this.value) : false
      },
      isTimerNode() {
        return this.value ? NodeUtils.isTimerNode(this.value) : false
      },
      isSubFlowNode() {
        return this.value ? NodeUtils.isSubFlowNode(this.value) : false
      },
      // 初始化发起人节点
      initInitiator() {
        this.initiator = this.value.properties && this.value.properties.initiator
        let properties = JSON.parse(JSON.stringify(this.value.properties))
        Object.assign(this.startForm, properties)
        this.oldFormId = this.startForm.formId;
        if (!this.oldFormId) return;
        let formFieldList = [];
        if (this.startForm.allFormMap && this.startForm.allFormMap['form_' + this.oldFormId]) {
          formFieldList = this.startForm.allFormMap['form_' + this.oldFormId] || [];
        }
        this.formFieldList = formFieldList;
        this.getFormOperates()
      },
      /**
      * 初始化审批节点所需数据
      */
      initApproverNodeData() {
        this.activeName = 'config'
        this.isPrevNodeWithSubForm = false
        let properties = JSON.parse(JSON.stringify(this.value.properties))
        let formFieldList = [];
        const formId = properties.formId || this.processData.properties.formId;
        this.oldFormId = formId;
        if (formId && this.processData.properties.allFormMap && this.processData.properties.allFormMap['form_' + formId]) {
          formFieldList = this.processData.properties.allFormMap['form_' + formId] || [];
        }
        this.formFieldList = formFieldList;
        this.approverForm.formOperates = this.initFormOperates(this.value)
        Object.assign(this.approverForm, properties)
        this.getNodeOption()
        this.getPrevNodeOption()
        this.approverForm.waitMsgConfig.on = typeof this.approverForm.waitMsgConfig.on === 'number' ? this.approverForm.waitMsgConfig.on : 2
        this.approverForm.rejectMsgConfig.on = typeof this.approverForm.rejectMsgConfig.on === 'number' ? this.approverForm.rejectMsgConfig.on : 2
        this.getFormOperates()
      },
      initSubFlowData() {
        this.getNodeOption()
        this.getPrevNodeOption()
        let properties = JSON.parse(JSON.stringify(this.value.properties))
        Object.assign(this.subFlowForm, properties)
        const prevNode = this.prevNodeList[0]
        let formFieldList = [];
        const formId = prevNode.properties.formId || this.processData.properties.formId;
        if (formId && this.processData.properties.allFormMap && this.processData.properties.allFormMap['form_' + formId]) {
          formFieldList = this.processData.properties.allFormMap['form_' + formId] || [];
        }
        this.formFieldList = formFieldList;
        this.subFlowForm.launchMsgConfig.on = typeof this.subFlowForm.launchMsgConfig.on === 'number' ? this.subFlowForm.launchMsgConfig.on : 0
        this.getSubFlowFormInfo(this.subFlowForm.flowId)
      },
      openApproverTransmitRuleBox() {
        let assignList = this.approverForm.assignList ? JSON.parse(JSON.stringify(this.approverForm.assignList)) : []
        this.getRealAssignList(assignList)
        this.approverTransmitRuleVisible = true
      },
      getRealAssignList(assignList) {
        let newAssignList = this.prevNodeList.map(o => {
          let formFieldList = [];
          const formId = o.properties.formId || this.processData.properties.formId;
          if (formId && this.processData.properties.allFormMap && this.processData.properties.allFormMap['form_' + formId]) {
            formFieldList = this.processData.properties.allFormMap['form_' + formId] || [];
          }
          formFieldList = formFieldList.filter(o => o.__config__.jnpfKey !== 'table');
          return {
            nodeId: o.nodeId,
            title: o.properties.title,
            formFieldList,
            ruleList: []
          }
        })
        if (!assignList.length) {
          this.assignList = newAssignList
        } else {
          let list = []
          // 去掉被删掉的节点
          for (let i = 0; i < assignList.length; i++) {
            const e = assignList[i];
            inter: for (let j = 0; j < newAssignList.length; j++) {
              if (e.nodeId === newAssignList[j].nodeId) {
                const item = {
                  nodeId: e.nodeId,
                  title: newAssignList[j].title,
                  formFieldList: newAssignList[j].formFieldList,
                  ruleList: e.ruleList
                }
                list.push(item)
                break inter
              }
            }
          }
          let addList = newAssignList.filter(o => !assignList.some(item => item.nodeId === o.nodeId))
          this.assignList = [...list, ...addList]
        }
      },
      addTransmitRule(i) {
        this.assignList[i].ruleList.push({
          parentField: '',
          childField: '',
          childFieldOptions: []
        })
      },
      delTransmitRule(i, cIndex) {
        this.assignList[i].ruleList.splice(cIndex, 1)
      },
      saveApproverTransmitRule() {
        let boo = true
        for (let i = 0; i < this.assignList.length; i++) {
          const e = this.assignList[i]
          const ruleList = e.ruleList;
          for (let j = 0; j < ruleList.length; j++) {
            if (!ruleList[j].parentField) {
              boo = false
              this.$message({
                message: `请选择${e.title}的上节点字段`,
                type: 'error',
              })
              break
            }
            if (!ruleList[j].childField) {
              boo = false
              this.$message({
                message: `请选择${e.title}的本节点字段`,
                type: 'error',
              })
              break
            }
          }
        }
        if (!boo) return
        this.approverForm.assignList = this.assignList
        this.approverTransmitRuleVisible = false
        this.assignList = []
      },
      getSubFlowFormInfo(flowId) {
        if (!flowId) {
          this.childFieldOptions = []
          this.childFuncRequiredOptions = []
          return
        }
        getFlowFormInfo(flowId).then(res => {
          let { formType = 1, propertyJson } = res.data
          let formJson = {}, fieldList = []
          if (propertyJson) formJson = JSON.parse(propertyJson)
          if (formType == 1) {
            fieldList = this.transformFormJson(formJson)
          } else {
            fieldList = formJson.fields
          }
          this.childFieldOptions = this.transformFieldList(fieldList).filter(o => o.__config__.jnpfKey !== 'table')
          this.childFuncRequiredOptions = this.childFieldOptions.filter(o => o.__config__ && o.__config__.required)
          let assignList = this.subFlowForm.assignList ? JSON.parse(JSON.stringify(this.subFlowForm.assignList)) : []
          this.getRealAssignList(assignList)
        })
      },
      openRuleBox() {
        if (!this.subFlowForm.flowId) {
          this.$message({
            message: '请选择子流程表单',
            type: 'error',
          })
          return
        }
        getFlowFormInfo(this.subFlowForm.flowId).then(res => {
          let { formType = 1, propertyJson } = res.data
          let formJson = {}, fieldList = []
          if (propertyJson) formJson = JSON.parse(propertyJson)
          if (formType == 1) {
            fieldList = this.transformFormJson(formJson)
          } else {
            fieldList = formJson.fields
          }
          this.childFieldOptions = this.transformFieldList(fieldList).filter(o => o.__config__.jnpfKey !== 'table')
          let assignList = this.subFlowForm.assignList ? JSON.parse(JSON.stringify(this.subFlowForm.assignList)) : []
          this.getRealAssignList(assignList)
          this.ruleVisible = true
        })
      },
      saveRule() {
        let boo = true
        for (let i = 0; i < this.assignList.length; i++) {
          const e = this.assignList[i]
          const ruleList = e.ruleList;
          for (let j = 0; j < ruleList.length; j++) {
            if (!ruleList[j].parentField) {
              boo = false
              this.$message({
                message: `请选择${e.title}的父流程字段`,
                type: 'error',
              })
              break
            }
            if (!ruleList[j].childField) {
              boo = false
              this.$message({
                message: `请选择${e.title}的子流程字段`,
                type: 'error',
              })
              break
            }
          }
        }
        if (!boo) return
        this.subFlowForm.assignList = this.assignList
        this.ruleVisible = false
        this.assignList = []
      },
      // 获取上一节数据
      getPrevNodeOption() {
        let prevNode = NodeUtils.getPreviousNode(this.value.prevId, this.processData)
        let node = JSON.parse(JSON.stringify(prevNode))
        delete node.childNode
        let prevNodeList = []
        const loop = nodeData => {
          if (nodeData.conditionNodes) {
            let hasCondition = nodeData.conditionNodes.some(o => o.nodeId === this.value.nodeId)
            if (hasCondition) return prevNodeList.push(nodeData)
          }
          if (nodeData.childNode) {
            loop(nodeData.childNode)
          } else if (nodeData.conditionNodes && !nodeData.childNode) {
            for (let c of nodeData.conditionNodes) {
              loop(c)
            }
          } else {
            prevNodeList.push(nodeData)
          }
        }
        loop(node)
        this.prevNodeList = prevNodeList
        this.getPrevNodeRealList()
      },
      getPrevNodeRealList() {
        const loop = (data) => {
          inner: for (let i = 0; i < data.length; i++) {
            if (['condition', 'subFlow', 'timer'].includes(data[i].type)) {
              if (data[i].type === 'subFlow') this.isPrevNodeWithSubForm = true
              let prevNode = NodeUtils.getPreviousNode(data[i].prevId, this.processData)
              let node = JSON.parse(JSON.stringify(prevNode))
              delete node.childNode
              let prevNodeList = []
              const getPrevNodeAllList = nodeData => {
                if (nodeData.conditionNodes) {
                  let hasCondition = nodeData.conditionNodes.some(o => o.nodeId === data[i].nodeId)
                  if (hasCondition) return prevNodeList.push(nodeData)
                }
                if (nodeData.childNode) {
                  getPrevNodeAllList(nodeData.childNode)
                } else if (nodeData.conditionNodes && !nodeData.childNode) {
                  for (let c of nodeData.conditionNodes) {
                    getPrevNodeAllList(c)
                  }
                } else {
                  prevNodeList.push(nodeData)
                }
              }
              getPrevNodeAllList(node)
              data.splice(i, 1, ...prevNodeList)
              loop(data)
              break inner
            }
          }
        }
        loop(this.prevNodeList)
        this.prevNodeList = this.unique(this.prevNodeList, 'nodeId')
      },
      // 去重
      unique(arr, attrName) {
        const res = new Map()
        // 根据对象的某个属性值去重
        return arr.filter(o => !res.has(o[attrName]) && res.set(o[attrName], 1))
      },
      // 获取退回步骤选项
      getNodeOption() {
        let list = [], _this = this
        const loop = data => {
          if (Array.isArray(data)) data.forEach(d => loop(d))
          if (data.type === 'approver') list.push(data)
          if (data.conditionNodes && Array.isArray(data.conditionNodes)) loop(data.conditionNodes)
          if (data.childNode) loop(data.childNode)
        }
        loop(this.processData)
        let beforeNodeList = [];
        for (let i = 0; i < list.length; i++) {
          if (list[i].nodeId === _this.value.nodeId) break;
          beforeNodeList.push(list[i]);
        }
        this.beforeNodeOptions = beforeNodeList.map(o => ({ id: o.nodeId, fullName: o.properties.title }));
        let realList = []
        for (let i = 0; i < list.length; i++) {
          if (list[i].nodeId === _this.value.nodeId) break
          realList.push(list[i])
        }
        this.realNodeList = realList
        let nodeOptions = list.filter(o => o.nodeId !== _this.value.nodeId)
        this.nodeOptions = nodeOptions
      },
      getSwerveNodeOption() {
        let list = [];
        const loop = data => {
          if (Array.isArray(data)) data.forEach(d => loop(d));
          if (data.type === 'approver' || data.type === 'start') list.push(data);
          if (data.conditionNodes && Array.isArray(data.conditionNodes)) loop(data.conditionNodes);
          if (data.childNode) loop(data.childNode);
        };
        loop(this.processData);
        const prevNode = this.prevNodeList[0];
        let beforeNodeList = [];
        for (let i = 0; i < list.length; i++) {
          beforeNodeList.push(list[i]);
        }
        this.beforeNodeOptions = beforeNodeList.map(o => ({ id: o.nodeId, fullName: o.properties.title }));
      },
      /**
       * 初始化条件节点数据
       */
      initConditionNodeData() {
        this.getConditionNodeFieldList()
        this.getSwerveNodeOption()
        // 初始化条件表单数据
        let nodeConditions = this.value.properties && this.value.properties.conditions
        for (let i = 0; i < nodeConditions.length; i++) {
          for (let j = 0; j < this.usedFormItems.length; j++) {
            if (nodeConditions[i].__vModel__ === this.usedFormItems[j].__vModel__) {
              nodeConditions[i] = { ...nodeConditions[i], ...this.usedFormItems[j] }
            }
          }
        }
        this.pconditions = JSON.parse(JSON.stringify(nodeConditions))
        this.pconditions.matchLogic = this.properties.matchLogic || 'and';
      },

      initTimerNodeData() {
        this.getConditionNodeFieldList()
        // 初始化条件表单数据
        let nodeConditions = this.value.properties && this.value.properties.conditions
        for (let i = 0; i < nodeConditions.length; i++) {
          for (let j = 0; j < this.usedFormItems.length; j++) {
            if (nodeConditions[i].__vModel__ === this.usedFormItems[j].__vModel__) {
              nodeConditions[i] = { ...nodeConditions[i], ...this.usedFormItems[j] }
            }
          }
        }
        this.pconditions = JSON.parse(JSON.stringify(nodeConditions))
        this.properties = this.value.properties

      },


      getConditionNodeFieldList() {
        this.getPrevNodeOption()
        if (!this.prevNodeList.length) {
          this.formFieldList = []
        } else {
          let prevNode = this.prevNodeList[0]
          let formFieldList = [];
          const formId = prevNode.properties.formId || this.processData.properties.formId;
          if (formId && this.processData.properties.allFormMap && this.processData.properties.allFormMap['form_' + formId]) {
            formFieldList = this.processData.properties.allFormMap['form_' + formId] || [];
          }
          this.formFieldList = formFieldList.filter(o => o.__config__.jnpfKey !== 'table');
        }
      },
      fieldNameChange(val, item, i, childIndex) {
        let obj = this.usedFormItems.filter(o => o.__vModel__ == val)[0]
        item.fieldName = obj.__config__.label
        item.jnpfKey = obj.__config__.jnpfKey
        item = { ...item, ...obj }
        item.fieldValue = undefined
        item.fieldLabel = ''
        item.fieldValueJnpfKey = ''
        this.$set(this.pconditions[i].groups, childIndex, item)
      },
      symbolChange(val, item) {
        let obj = this.symbolOptions.filter(o => o.value == val)[0]
        item.symbolName = obj.label
      },
      logicChange(val, item) {
        let obj = this.logicOptions.filter(o => o.value == val)[0]
        item.logicName = obj.label
      },
      fieldValueTypeChange(item) {
        item.fieldValue = ''
        item.fieldLabel = ''
        item.fieldValueJnpfKey = ''
      },
      fieldTypeChange(item) {
        item.field = ''
        item.fieldName = ''
        item.jnpfKey = ''
        item.fieldValue = ''
      },
      fieldValueChange(val, item) {
        let obj = this.usedFormItems.filter(o => o.__vModel__ == val)[0]
        item.fieldLabel = obj.__config__.label
        item.fieldValueJnpfKey = obj.__config__.jnpfKey || ''
      },
      // 条件字段验证
      exist() {
        let isOk = true;
        //  遍历数组，判断非空
        for (let i = 0; i < this.pconditions.length; i++) {
          const e = this.pconditions[i];
          if (!e.groups.length) return this.$message.warning('条件配置不能为空')
          for (let index = 0; index < e.groups.length; index++) {
            const element = e.groups[index];
            if (!element.field && element.fieldType == 1) {
              this.$message({
                showClose: true,
                message: '条件字段不能为空',
                type: 'error',
                duration: 1000
              });
              isOk = false
              break
            }
            if (!element.symbol) {
              this.$message({
                showClose: true,
                message: '比较不能为空',
                type: 'error',
                duration: 1000
              });
              isOk = false
              break
            }
          }
        }
        return isOk;
      },
      getPrintTplList() {
        this.$store.dispatch('base/getPrintFlowTree').then(res => {
          let list = res.filter(o => o.children && o.children.length)
          this.printTplList = list.map(o => ({
            ...o,
            hasChildren: true
          }))
        })
      },
      onMsgChange(obj, key, params) {
        const [id, item] = params
        if (!id) {
          this[obj][key].msgId = ''
          this[obj][key].msgName = ''
          this[obj][key].templateJson = []
          return
        }
        if (this[obj][key].msgId === id) return
        this[obj][key].msgId = id
        this[obj][key].msgName = item.fullName
        this[obj][key].templateJson = item.templateJson
      },
      onFuncChange(obj, key, params) {
        const [id, item] = params
        if (!id) {
          this[obj][key].interfaceId = ''
          this[obj][key].interfaceName = ''
          this[obj][key].templateJson = []
          return
        }
        if (this[obj][key].interfaceId === id) return
        this[obj][key].interfaceId = id
        this[obj][key].interfaceName = item.fullName
        this[obj][key].templateJson = item.templateJson.map(o => ({ ...o, sourceType: 1, relationField: '' }))
      },
      onRelationFieldChange(val, item) {
        if (!val) return
        let list = this.funcOptions.filter(o => val === o.__vModel__)
        if (!list.length) return
        let obj = list[0]
        this.$set(item, 'isSubTable', obj.__config__ && obj.__config__.isSubTable ? obj.__config__.isSubTable : false)
      },
      onSubFlowIdChange(id, item) {
        if (this.subFlowForm.flowId === id) return
        this.subFlowForm.formField = ''
        for (let index = 0; index < this.subFlowForm.interfaceConfig.templateJson.length; index++) {
          const element = this.subFlowForm.interfaceConfig.templateJson[index];
          element.relationField = ''
        }


        if (!id) {
          this.subFlowForm.flowId = ''
          this.subFlowForm.flowName = ''
          return
        }
        if (this.subFlowForm.flowId === id) return
        this.subFlowForm.flowId = id
        this.subFlowForm.flowName = item.fullName
        this.subFlowForm.assignList = []
        this.getSubFlowFormInfo(id)
      },
      addGroup() {
        let item = {
          logic: "and",
          groups: [{
            fieldName: '',
            symbolName: '',
            fieldValue: undefined,
            fieldType: 1,
            fieldValueType: 2,
            fieldLabel: '',
            fieldValueJnpfKey: '',
            logicName: '并且',
            field: '',
            symbol: '',
            logic: '&&',
            jnpfKey: '',
            cellKey: +new Date(),
          }]
        }
        this.pconditions.push(item)
      },
      addItem(index) {
        this.pconditions[index].groups.push({
          fieldName: '',
          symbolName: '',
          fieldValue: undefined,
          fieldType: 1,
          fieldValueType: 2,
          fieldLabel: '',
          fieldValueJnpfKey: '',
          logicName: '并且',
          field: '',
          symbol: '',
          logic: '&&',
          jnpfKey: '',
          cellKey: +new Date(),
        })
      },
      delGroup(index) {
        this.pconditions.splice(index, 1)
      },
      delItem(index, childIndex) {
        this.pconditions[index].groups.splice(childIndex, 1)
      },
      // 条件节点
      onConditionDateChange(val, item) {
        if (!val) return item.fieldLabel = ''
        let format = item.format || 'yyyy-MM-dd HH:mm:ss'
        item.fieldLabel = this.jnpf.toDate(val, format)
      },
      onConditionListChange(data, item) {
        if (!data || !data[1]) return item.fieldLabel = ''
        let labelList = data[1].map(o => o.fullName)
        item.fieldLabel = labelList.join('/')
      },
      onConditionObjChange(data, item) {
        if (!data || !data[1]) return item.fieldLabel = ''
        item.fieldLabel = data[1].fullName || ''
      },
      editFormula(item) {
        this.activeItem = item
        this.$nextTick(() => {
          this.formulaVisible = true
        })
      },
      updateFormula(formula) {
        this.activeItem.field = formula
        this.activeItem.fieldName = formula
      },
      goDetail(id) {
        this.viewVisible = true
        this.$nextTick(() => {
          this.$refs.View.init(id)
        })
      },
      onStartFormIdChange(id, item) {
        if (!id) return this.handleNull('startForm')
        let isSameForm = this.startForm.formId === id
        this.startForm.formName = item.fullName
        this.startForm.formId = id
        this.getFormFieldList(id, 'startForm', isSameForm)
      },
      onApproverFormIdChange(id, item) {
        if (!id) return this.handleNull('approverForm')
        let isSameForm = this.startForm.formId === id
        this.approverForm.formName = item.fullName
        this.approverForm.formId = id
        this.approverForm.assignList = []
        this.getFormFieldList(id, 'approverForm', isSameForm)
      },
      handleNull(form) {
        this[form].formName = ''
        this[form].formId = ''
        let formFieldList = []
        if (form === 'approverForm') {
          const formId = this.processData.properties.formId;
          if (formId && this.processData.properties.allFormMap && this.processData.properties.allFormMap['form_' + formId]) {
            formFieldList = this.processData.properties.allFormMap['form_' + formId] || [];
          }
        }
        this.formFieldList = formFieldList
        this[form].formOperates = this.initFormOperates(this.value, true)
        if (form === 'startForm') this.updateAllNodeFormOperates()
        this.updateAllFormMap('', form, formFieldList);
      },
      getFormFieldList(id, form, isSameForm) {
        getFormInfo(id).then(res => {
          let { formType = 1, propertyJson } = res.data
          let formJson = {}, fieldList = []
          if (propertyJson) formJson = JSON.parse(propertyJson)
          if (formType == 1) {
            fieldList = this.transformFormJson(formJson)
          } else {
            fieldList = formJson.fields
          }
          let list = this.transformFieldList(fieldList)
          this.formFieldList = list
          this[form].formOperates = this.initFormOperates(this.value, true, isSameForm)
          this.updateAllFormMap(id, form, list);
          // 更新所有没设置表单的节点的表单权限
          if (form === 'startForm') this.updateAllNodeFormOperates(isSameForm)
          this.getFormOperates()
        })
      },
      // 更新allFormMap
      updateAllFormMap(id, form, list) {
        if (form === 'startForm') {
          if (!this[form].allFormMap) this[form].allFormMap = {};
          if (this.oldFormId && !this.getHasSameFormId(this.oldFormId)) delete this[form].allFormMap['form_' + this.oldFormId];
          if (id) this[form].allFormMap['form_' + id] = list;
        } else {
          if (!this.processData.properties.allFormMap) this.processData.properties.allFormMap = {};
          if (this.oldFormId && !this.getHasSameFormId(this.oldFormId)) delete this.processData.properties.allFormMap['form_' + this.oldFormId];
          if (id) this.processData.properties.allFormMap['form_' + id] = list;
        }
        this.oldFormId = id;
      },
      // 判断其他节点是否跟当前节点旧表单同一表单
      getHasSameFormId(formId) {
        if (!formId) return false;
        let hasSameFormId = false;
        const loop = data => {
          if (Array.isArray(data)) data.forEach(d => loop(d));
          if ((data.type === 'approver' || data.type === 'start') && data.nodeId !== this.value.nodeId && data.properties.formId === formId) {
            return (hasSameFormId = true);
          }
          if (data.conditionNodes && Array.isArray(data.conditionNodes)) loop(data.conditionNodes);
          if (data.childNode) loop(data.childNode);
        };
        loop(this.processData);
        return hasSameFormId;
      },
      transformFormJson(list) {
        let fieldList = list.map(o => ({
          __config__: {
            label: o.filedName,
            jnpfKey: o.jnpfKey || '',
            required: o.required || false
          },
          __vModel__: o.filedId,
          multiple: o.multiple || false
        }))
        return fieldList
      },
      transformFieldList(formFieldList) {
        let list = []
        const loop = (data, parent) => {
          if (!data) return
          if (data.__vModel__) {
            const isTableChild = parent && parent.__config__ && parent.__config__.jnpfKey === 'table'
            let obj = {
              ...data,
              id: isTableChild ? parent.__vModel__ + '-' + data.__vModel__ : data.__vModel__,
              __vModel__: isTableChild ? parent.__vModel__ + '-' + data.__vModel__ : data.__vModel__,
              fullName: isTableChild ? parent.__config__.label + '-' + data.__config__.label : data.__config__.label,
              __config__: {
                label: isTableChild ? parent.__config__.label + '-' + data.__config__.label : data.__config__.label,
                jnpfKey: data.__config__.jnpfKey,
                required: data.__config__.required,
                isSubTable: data.__config__.isSubTable,
              },
            }
            delete obj.on
            delete obj.style
            delete obj.options
            delete obj.props
            delete obj.templateJson
            delete obj.columnOptions
            delete obj.addTableConf
            delete obj.tableConf
            list.push(obj)
          }
          if (Array.isArray(data)) data.forEach(d => loop(d, parent))
          if (data.__config__ && data.__config__.children && Array.isArray(data.__config__.children)) {
            loop(data.__config__.children, data)
          }
        }
        loop(formFieldList)
        return list
      },
      updateAllNodeFormOperates(isSameForm) {
        const loop = data => {
          if (Array.isArray(data)) data.forEach(d => loop(d))
          if (data.type === 'approver' && !data.properties.formId) {
            data.properties.formOperates = this.initFormOperates(data, true, isSameForm)
          }
          if (data.conditionNodes && Array.isArray(data.conditionNodes)) loop(data.conditionNodes)
          if (data.childNode) loop(data.childNode)
        }
        loop(this.processData)
      },
      radioInput(val) {
        this.approverForm.rejectStep = '0'
      },
      onTimeLimitChange(val, key) {
        if (val == 0) this[key].overTimeConfig.on = 0;
      }
    },
  };
</script>
<style lang="scss">
  .condition-dialog {
    .el-dialog__header {
      border-bottom: 1px solid #eee;
    }
  }
</style>
<style lang="scss" scoped>
  .hand ::v-deep input {
    cursor: pointer;
  }
  .tips p {
    line-height: 24px;
  }
  .drawer {
    ::v-deep .el-drawer__body {
      padding-bottom: 62px;
      overflow: hidden;
    }
    .el-select {
      width: 100%;
      &.timeout-select {
        width: 80px;
      }
    }

    ::v-deep .el-tabs--top .el-tabs__item.is-top:nth-child(2) {
      padding-left: 20px;
    }

    ::v-deep .el-tabs__item:focus {
      box-shadow: none !important;
    }

    ::v-deep .el-tabs__header {
      margin-bottom: 0;
    }
  }
  .mr-10 {
    margin-right: 10px;
  }

  .header {
    line-height: 28px;
  }

  .printWrap {
    padding: 10px 0;
    text-align: center;
    ::v-deep .el-divider--horizontal {
      margin-top: 10px;
    }
  }
  .actions {
    position: absolute;
    bottom: 0;
    left: 0;
    padding: 10px 20px 20px;
    width: 100%;
    box-sizing: border-box;
    text-align: right;
  }

  .radio-item {
    line-height: 30px;
    width: calc(25% - 30px);
  }

  .priority-select {
    width: 118px;
    position: absolute;
    right: 26px;
  }

  .form-auth-table {
    height: 100%;
    font-size: 14px;
    ::v-deep .el-checkbox__label {
      font-size: 12px;
    }
    .auth-table-header {
      background: #fafafa;
      line-height: 40px;
    }
    .row {
      display: flex;
      align-items: center;
      line-height: 32px;
      padding: 8px 12px;
      border-bottom: 1px solid #efefef;
      &:hover {
        background: #f5f7fa;
      }
      .label {
        flex: 1;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;

        .required {
          color: #f2725e;
        }
      }
      .radio-group {
        flex: 2;
        display: flex;
        justify-content: space-between;
      }
    }
  }

  .approver-pane {
    height: 100%;
    overflow: hidden;
    ::v-deep .el-tabs__content {
      height: calc(100% - 40px);
      .el-tab-pane {
        height: 100%;
        .config-scrollbar {
          height: 100%;
          .el-row {
            font-size: 14px;
            color: #606266;
            height: 32px;
            line-height: 32px;
          }
        }
      }
    }
    .per-cell {
      display: flex;
      align-items: center;
      margin-bottom: 10px;
      &:last-child {
        margin-bottom: unset;
      }
      .el-checkbox {
        width: 105px;
      }
      ::v-deep .el-input {
        flex: 1;
      }
    }
  }
  .option-box-tip {
    font-size: 14px;
    color: #a5a5a5;
  }
  .option-box {
    font-size: 14px;
    padding-left: 1rem;
  }

  .condition-pane {
    height: 100%;
    overflow: auto;
    overflow-x: hidden;
  }
  .mr-10 {
    margin-right: 10px;
  }
  .mb-10 {
    margin-bottom: 10px;
  }
  .leading-32px {
    line-height: 32px;
  }
  .condition-list {
    font-size: 14px;
    line-height: 36px;
    &.condition-list-header {
      ::v-deep .el-col {
        text-align: left;
      }
    }
    ::v-deep .el-col {
      text-align: center;
      padding: 0 4px;
      &.label,
      &.fieldValue {
        display: flex;
        align-items: center;
      }
      .el-input,
      .el-input-number,
      .el-select {
        width: 100%;
      }
      .el-icon-delete {
        cursor: pointer;
        &:hover {
          color: #f2725e;
        }
      }
      .edit-script-btn {
        flex: 1;
        height: 32px;
      }
    }
    .condition-select {
      &.el-select {
        &.condition-type-select {
          width: 80px;
          flex-shrink: 0;
        }
        ::v-deep .el-input__inner {
          padding: 0 26px 0 10px;
        }
      }
    }
  }
  .rule-dialog {
    ::v-deep .el-dialog__body {
      padding: 0 0 10px !important;
      min-height: 364px;
    }
    .node-tabs {
      ::v-deep .el-tabs__nav-wrap {
        padding: 0 20px;
      }
      ::v-deep .el-tabs__content {
        .el-tab-pane {
          min-height: 300px !important;
          max-height: 500px !important;
          padding: 0 10px 10px;
          overflow: auto;
        }
      }
    }
    .option-box-tip {
      margin-bottom: 20px;
    }
    .rule-cell {
      line-height: 32px;
      &.mid {
        color: #1890ff;
        text-align: center;
      }
    }
  }
  .parameter-box {
    height: 30px;
    line-height: 30px;
    margin-bottom: 8px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .variable-box {
    margin-bottom: 8px;
  }
  .form-item-label {
    font-weight: 600;
    font-size: 14px;
    line-height: 32px;
  }
  .countersign-cell {
    display: flex;
    align-items: center;
    .countersign-cell-item {
      width: 150px;
      margin: 0 10px;
    }
    .w-70px {
      width: 70px;
    }
    .mb-10 {
      margin-bottom: 10px;
    }
    .w-120px {
      width: 120px;
    }
    .font-color {
      font-size: 14px !important;
      color: #606266;
    }
    .w-200px {
      width: 200px;
    }
    .mx-10px {
      margin-left: 10px;
      margin-right: 10px;
    }
    .inline-block {
      display: inline-block;
    }
  }
  .form-sub-title {
    font-size: 14px;
    color: #606266;
    line-height: 32px;
  }
  .form-item-content {
    padding: 0 10px;
    &.form-item-content-first {
      margin: -12px 0 18px;
    }
    .w-500px {
      width: 500px;
    }
    .ml-10px {
      margin-left: 10px;
    }
    .mt-10px {
      margin-top: 10px;
    }
  }
  .el-form-item {
    margin-bottom: 12px !important;
  }
  .has-free-approver {
    width: 105px;
  }
  .form-item-approver {
    margin-left: 5px;
  }
  .assignee-form {
    display: flex;
    .form-field-type {
      width: 120px;
      ::v-deep .el-input--small {
        .el-input__inner {
          height: 32px;
          line-height: 32px;
          border-radius: 5px 0px 0px 5px;
        }
      }
    }
    .form-field {
      ::v-deep .el-input--small {
        .el-input__inner {
          height: 32px;
          line-height: 32px;
          border-radius: 0px 5px 5px 0px;
          border-left: 0px solid #dcdfe6;
        }
      }
    }
  }
</style>
